Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение фрагмента в текстовом файле 
:(
    Опции темы
Sem
Дата 30.1.2003, 20:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет. Мужики, нужна помощь по работе с текстовыми файлами. Проблемка в следующем. Мне нужно найти в текстовом файле определенный текст и вывести его в компонент TMemo. Показать в TMemo нужно только мой текст, а он находиться где-то в середине текстового файла, при этом текст может менятся, только его начало и конец всегда остаются одинаковыми. Помогите это реализовать.
  Вверх
Step
Дата 30.1.2003, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Ищеш начало с начала файла, ищеш конец с конца. и делаеш вырезу, стринги имеют для этого все необходимое.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
neutrino
Дата 30.1.2003, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Udobno budet pol'zovat'sja TStrings. Zagruzi v nego fai'l, a nujnye stroki perekopirui' v Memo. Ili sam pishi proceduru zagruzki fai'la.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 30.1.2003, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Какой примерно размер файла?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 31.1.2003, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Для быстрого алгоритма желательно знать характеристики файла - насколько он большой. А также характеристики твоего текста - где вероятнее всего может располагаться, насколько он меньше файла.

Если файл большой, текст не очень и располагаться может где угодно, то самое простое:
- считываем в буфер кусок файла
- ищем в нем первый символ твоего маркера для начала. Если нашли букву - сравниваем следующую со второй. Ну и так далее до полного сопадения. Если нашли - выставляем флаг, что нашли и начинаем искать точно таким же способом конец. Если уже ищем конец, то все просмотренное запоминаем.
Можно сравнивать сразу конечный символ маркера, а не второй. Благо буфер - это обычно массив и любой символ можно получить с одинаковой скоростью. Но это очень сильно зависит от характеристик текста.
- если дошли до конца буфера считываем следующий кусок. И снова ищем.

Если файл небольшой, то можно закачать его сразу весь в память.

Есть еще более хитрые способы работать с большим файлом - использовать отображение файла в память, тогда операции ввода/вывода достаточно ускоряются.
Вообщем сама по себе задачка с математической точки зрения очень интересная.

PM MAIL WWW ICQ   Вверх
Step
Дата 31.1.2003, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



AntonSaburov ну это уже вопросы оптимизация


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
AntonSaburov
Дата 31.1.2003, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Ну а без оптимизации для этой задачки разве нужно спрашивать решение ? smile.gif
Любой может после недели-двух изучения программирования.

PM MAIL WWW ICQ   Вверх
Step
Дата 31.1.2003, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Цитата
Любой может после недели-двух изучения программирования.
это смотря кто, и как к решению вопроса подходит


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Sem
Дата 31.1.2003, 00:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Файл небольшого размера ~20Kb.
  Вверх
Vit
Дата 31.1.2003, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата
Файл небольшого размера ~20Kb.


Загружаешь в TStringList, далее ишешь нужный кусок и из него подгружаешь в Memo. Разберёшся или пример нужен?


Цитата
AntonSaburov ну это уже вопросы оптимизация
- ага, если файл 2 гигабайта я посмотрю как ты его будешь в TStirngList засовывать - теоретически проблем нет, только работать не будет.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 31.1.2003, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата
Файл небольшого размера ~20Kb


Ну тогда просто весь целиком заталкиваем в TStrings - и работаем.
PM MAIL WWW ICQ   Вверх
Step
Дата 31.1.2003, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Цитата
- ага, если файл 2 гигабайта я посмотрю как ты его будешь в TStirngList засовывать - теоретически проблем нет, только работать не будет.
хотел бы я посмотреть куда ты вообще 2 гига запихнуть сможеш кроме как в память


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Vit
Дата 31.1.2003, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Step @ 30.1.2003, 15:53)
Цитата
- ага, если файл 2 гигабайта я посмотрю как ты его будешь в TStirngList засовывать - теоретически проблем нет, только работать не будет.
хотел бы я посмотреть куда ты вообще 2 гига запихнуть сможеш кроме как в память

И я об этом же, собственно оптимизация здесь ни причём вовсе, разница в производительности и требования к железу на порядки в зависимости от реализации это не оптимизация, это качественно разный подход. Итак моё мнение:


1) Если файл менее 50 кб - без разницы как его читать, но читать целиком предпочтительнее
2) Если файл до 500 кб то лучше читать целиком
3) Если байл больше 500 кб то читать только по кускам


Естественно что 2 гига читать целиком и не надо, для таких файлов надо применять только поблочное чтение.



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Sem
Дата 31.1.2003, 04:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Мужики, помогите примером! Заранее благодарен.
  Вверх
Vit
Дата 31.1.2003, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Код

With TStringList.create do
 try
   LoadFromFile('c:\MyFileName.txt');
   text:=copy(text,pos(_from,text)+length(_from),length(text));
   memo.text:=copy(text,1,pos(_to,text)-1);
 finally
   free;
 end;



где _from - фраза c которой загружать
_to - фраза до которой загружать


Код писал на вскидку, поэтому могут быть неточности.


PS. В нашем FAQ большая статья по работе с файлами.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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