![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sem |
|
|||
|
Unregistered |
Привет. Мужики, нужна помощь по работе с текстовыми файлами. Проблемка в следующем. Мне нужно найти в текстовом файле определенный текст и вывести его в компонент TMemo. Показать в TMemo нужно только мой текст, а он находиться где-то в середине текстового файла, при этом текст может менятся, только его начало и конец всегда остаются одинаковыми. Помогите это реализовать.
|
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
Ищеш начало с начала файла, ищеш конец с конца. и делаеш вырезу, стринги имеют для этого все необходимое.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| neutrino |
|
|||
![]() 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 |
|||
|
||||
| Vit |
|
|||
![]() 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 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Для быстрого алгоритма желательно знать характеристики файла - насколько он большой. А также характеристики твоего текста - где вероятнее всего может располагаться, насколько он меньше файла.
Если файл большой, текст не очень и располагаться может где угодно, то самое простое: - считываем в буфер кусок файла - ищем в нем первый символ твоего маркера для начала. Если нашли букву - сравниваем следующую со второй. Ну и так далее до полного сопадения. Если нашли - выставляем флаг, что нашли и начинаем искать точно таким же способом конец. Если уже ищем конец, то все просмотренное запоминаем. Можно сравнивать сразу конечный символ маркера, а не второй. Благо буфер - это обычно массив и любой символ можно получить с одинаковой скоростью. Но это очень сильно зависит от характеристик текста. - если дошли до конца буфера считываем следующий кусок. И снова ищем. Если файл небольшой, то можно закачать его сразу весь в память. Есть еще более хитрые способы работать с большим файлом - использовать отображение файла в память, тогда операции ввода/вывода достаточно ускоряются. Вообщем сама по себе задачка с математической точки зрения очень интересная. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
AntonSaburov ну это уже вопросы оптимизация
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Ну а без оптимизации для этой задачки разве нужно спрашивать решение ?
Любой может после недели-двух изучения программирования. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Sem |
|
|||
|
Unregistered |
Файл небольшого размера ~20Kb.
|
|||
|
||||
| Vit |
|
||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Загружаешь в TStringList, далее ишешь нужный кусок и из него подгружаешь в Memo. Разберёшся или пример нужен?
-------------------- 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 |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Ну тогда просто весь целиком заталкиваем в TStrings - и работаем. |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Vit |
|
||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
И я об этом же, собственно оптимизация здесь ни причём вовсе, разница в производительности и требования к железу на порядки в зависимости от реализации это не оптимизация, это качественно разный подход. Итак моё мнение: 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 |
||||
|
|||||
| Sem |
|
|||
|
Unregistered |
Мужики, помогите примером! Заранее благодарен.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
где _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 |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Это не ответ на вопросы относящийся к оптимизации, это самый что ни на есть правильный ответ на данный вопрос, данный профессиональным и опытным программистом..... так-что ты зря Step так говоришь.... -------------------- |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |