Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замены в текстовых файлах, Прошу подсказки 
:(
    Опции темы
ИгнатьевАлексей
Дата 24.6.2006, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Господа профессионалы!

Задача моя тривиальна! В текстовом файле большого размера читаю строки, нахожу нужную и заменяю ее другой. Использую FileSystemObject. Почитав подобные темы на форуме, решил считать весь файл в одну строковую переменную, выполнить Replace и записать файл снова. Но результата выполнения программы я даже не дождался, видимо получается гигантская строка (а может и не в этом причина....?). Тогда стал построчно читать, проверять и писать в другой файл, а затем переименовавать его. В принципе задачу решил, да что-то подсказывает мне, что неэлегантный это путь. smile 
Подскажите, пожалуйста! Как в таком случае поступил бы мастер?

Заранее благодарю!
 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 25.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Используем промежуточное решение.

Читаем в textstream, выполняем потоковый replace и сброс в файл, но не всего файла сразу, а блочно. Как показывает эксперимент, после 64-кбайтного размера блока ускорения обработки уже не происходит, посему рекомендую остановиться на двухстраничном буфере чтения по 64 кб страница. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 25.6.2006, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Спасибо за отклик!

Если не затруднит! Что это - потоковый replace?
Если я правильно понял, то читаем строки до определенного объема, делаем replace, пишем в новый файл, и т.д.? 
Непонятно как

Цитата

остановиться на двухстраничном буфере чтения по 64 кб страница

Что это значит? smile 

 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 26.6.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(ИгнатьевАлексей @  25.6.2006,  20:18 Найти цитируемый пост)
Что это - потоковый replace?

Приблизительно вот так.

Цитата(ИгнатьевАлексей @  25.6.2006,  20:18 Найти цитируемый пост)
Что это значит? 

Это значит что использовать не ReadAll, на который мозгов не хватает, а чтение порциями по 64 кб, замена в первом буфере, сброс его начала в файл и сдвижка из второго (чтобы не потерять замены, пришедшиеся на стык порций чтения), после чего подчитывание следующей порции.

Еще лучше - использование трехэлементного буфера, типа такого (алгоритм):
Код

read buf1
repeat:
read buf2
read buf3
buf()=replace(buf(),...)
write buf1
write buf2
buf1=buf3
goto repeat

но эту барахлюндию желательно проводить непослредственно на памяти, мимо переменных. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 27.6.2006, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Если я правильно понял, то буфером является переменная типа string? Если это так, то как ограничить чтение из файла 64кбайтами? 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 27.6.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(ИгнатьевАлексей @  27.6.2006,  09:40 Найти цитируемый пост)
как ограничить чтение из файла 64кбайтами?

Да собсно указывать сколько читать... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 27.6.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



А можно Вас попросить семплик по этому делу! Что-то я никак непойму как это сделать, если я построчно в переменную читаю 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.