![]() |
|
Модераторы: Akina |
![]()
|
|
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: нет Всего: 3 |
Господа профессионалы!
Задача моя тривиальна! В текстовом файле большого размера читаю строки, нахожу нужную и заменяю ее другой. Использую FileSystemObject. Почитав подобные темы на форуме, решил считать весь файл в одну строковую переменную, выполнить Replace и записать файл снова. Но результата выполнения программы я даже не дождался, видимо получается гигантская строка (а может и не в этом причина....?). Тогда стал построчно читать, проверять и писать в другой файл, а затем переименовавать его. В принципе задачу решил, да что-то подсказывает мне, что неэлегантный это путь. Подскажите, пожалуйста! Как в таком случае поступил бы мастер? Заранее благодарю! -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Используем промежуточное решение.
Читаем в textstream, выполняем потоковый replace и сброс в файл, но не всего файла сразу, а блочно. Как показывает эксперимент, после 64-кбайтного размера блока ускорения обработки уже не происходит, посему рекомендую остановиться на двухстраничном буфере чтения по 64 кб страница. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: нет Всего: 3 |
Спасибо за отклик!
Если не затруднит! Что это - потоковый replace? Если я правильно понял, то читаем строки до определенного объема, делаем replace, пишем в новый файл, и т.д.? Непонятно как
Что это значит? -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Приблизительно вот так. Это значит что использовать не ReadAll, на который мозгов не хватает, а чтение порциями по 64 кб, замена в первом буфере, сброс его начала в файл и сдвижка из второго (чтобы не потерять замены, пришедшиеся на стык порций чтения), после чего подчитывание следующей порции. Еще лучше - использование трехэлементного буфера, типа такого (алгоритм):
но эту барахлюндию желательно проводить непослредственно на памяти, мимо переменных. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: нет Всего: 3 |
Если я правильно понял, то буфером является переменная типа string? Если это так, то как ограничить чтение из файла 64кбайтами?
-------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Да собсно указывать сколько читать... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: нет Всего: 3 |
А можно Вас попросить семплик по этому делу! Что-то я никак непойму как это сделать, если я построчно в переменную читаю
-------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |