Страницы: 1
RSS
Работа с объектом ADODB.Stream
 
Добрый день!  
 
Подскажите, пожалуйста, в чем может быть причина следующей проблемки.  
 
Моя программа работает с достаточно тяжеловесными файлами html (средний "вес" файла 30-40 МБ, но бывают и больше), которые созданы в кодировке Utf-8. Для того чтобы получить доступ к данным в VBA, мне необходимо вначале провести преобразование строк html-кода в ASCII-формат. С этой целью я использую следующий тестовый код:  
 
Private Sub Utf8ToWin()  
Dim oStream As ADODB.Stream  
Dim Str As String  
Dim Fsys As Scripting.FileSystemObject  
Dim txtForWriting As TextStream  
 
Set Fsys = New Scripting.FileSystemObject  
Fsys.CreateTextFile "<FilePath>\WIN.html", True  
Set txtForWriting = Fsys.OpenTextFile("<FilePath>\WIN.html", ForWriting)  
 
Set oStream = New ADODB.Stream  
oStream.Type = 2  
oStream.Charset = "Utf-8"  
oStream.Open  
oStream.LoadFromFile "<FilePath>\UTF8.html"  
Do Until oStream.EOS  
 Str = oStream.ReadText  
 txtForWriting.WriteLine Str  
Loop  
oStream.Close  
txtForWriting.Close  
MsgBox "Готово!"  
End Sub  
 
Код работает безупречно для сравнительно небольших объемов текста. Однако если программа начинает работать с тяжеловесными файлами, то процесс обработки "застревает" на процедуре Str = oStream.ReadText. Выполнение кода "зависает" уже на первой строке html-кода, приходится закрывать Excel через Диспетчер задач Windows.  
 
Подскажите, пожалуйста, что в этом коде не так?.. Подозреваю, что я некорректно обращаюсь к объекту ADODB...  
 
Заранее большое спасибо за помощь!
 
Ссылка один в один http://forum.script-coding.info/viewtopic.php?id=3995  
 
Антон Вы не бот?
 
Нет, я не бот. :-)  
 
И как раз таки уже собирался продублировать ответ с "Серого форума" здесь, но Вы меня опередили. :)  
 
Было предложено решение:  
lngPartSize = 2^10 ' 2^20  
Do Until oStream.EOS  
   Str = oStream.ReadText(lngPartSize)  
   txtForWriting.Write Str  
Loop  
 
которое помогло исправить ситуацию - преобразование текста прошло успешно!
Страницы: 1
Читают тему
Наверх