Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 17:02   #1
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию Работа с объектом 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...

Заранее большое спасибо за помощь!
voam вне форума Ответить с цитированием
Старый 14.12.2009, 19:07   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Могу предложить Декодер
Вложения
Тип файла: rar Перекодировка.rar (16.1 Кб, 79 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.12.2009, 20:21   #3
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

doober, большое Вам спасибо за отклик!

У меня уже есть подобная разработка, однако в силу ряда причин мне необходимо использовать именно скриптовое преобразование файлов, не прибегая к автономному ПО. Единственный способ из тех, что мне удалось найти и осуществляющий именно эту операцию в VBA - использование объекта ADODB. Однако по непонятным мне причинам этот метод не всегда срабатывает ...

В любом случае, еще раз большое спасибо!

Но я все же не теряю надежды получить подсказку, как правильно написать скрипт.
voam вне форума Ответить с цитированием
Старый 14.12.2009, 22:40   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Подключите в Референсах Dekoder.

Пример и код использования во вложении.
Вложения
Тип файла: rar Декодер.rar (129.7 Кб, 65 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 15.12.2009, 23:31   #5
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

На Сером Форуме было предложено внести следующие изменения в моей код:
Код:
lngPartSize = 2^10 ' 2^20
Do Until oStream.EOS
    Str = oStream.ReadText(lngPartSize)
    txtForWriting.Write Str
Loop
т.е. задавать "явный" размер считываемой строки текста.

И это решение помогло!
voam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с Объектом {TabSheet} Rebel123 Общие вопросы Delphi 7 09.09.2009 15:52
Variant to Stream & Variant from Stream Oreol Общие вопросы Delphi 1 24.03.2009 13:14
Adodb+smarty проблема с циклом while Oleg_453 PHP 2 02.12.2008 14:41
Socket vs Stream JoanM Работа с сетью в Delphi 1 01.04.2008 10:10