![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Доброго времени суток. Задача стоит следущая. У файле есть примерно 5000 строк. Я открываю этот файл в мемо. Ищу нужные мне данные.... Точнее блок данных... это например из 450 до 1700 строки. Далее мне надо удалить ВСЕ строки ДО 450 и ПОСЛЕ 1700.. Вопрос таков:
Как это можно сделать? З.Ы. Идти построчно и удалять memo1.Lines.Delete(index) происходит оооочень долго... так как данных очень много.... (примерно 400 файлов по 5000 строк каждый), а мне надо как то хоть чуточку быстрее... не считая удаления все процессы занимают примерно 8 минут... с прострочным удалением примерно 57 минут... Именно поэтому я хочу ускорить процес. Посоветуйте пжлста что нибудь)) Спасибо! Это сообщение отредактировал(а) Zorak - 5.8.2011, 18:59 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
alexnef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.4.2010 Репутация: нет Всего: нет |
Удалить из memo или файла? Если из memo то легче их отсортировать и потом добавлять в memo.
И желательно увидеть код. |
|||
|
||||
Zorak |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Я работаю с текстом в мемо, который загруженный из файла, а после завершения работы все сохраняется в txt файл назад. Если сортировка будет менять местами строки - этого делать нельзя, положение строк важный елемент программы. Вот код который удаляет строки:
В данном случае nstring1 - это начало, тоесть ДО этого значения удаляются строки из начала файла, а nstring2 - это конец, тоесть удаляются ВСЕ строки ПОСЛЕ етого значения. -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
||||
|
|||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: нет Всего: 8 |
Zorak, ничего не удалять - а просто писать в файл строки с нужными номерами.
Вместо memo2.Lines.SaveToFile() будет сначала создание TFileStream'а с нужным именем, потом в цикле построчная запись в него нужных строк, потом удаление (закрытие) этого стрима. Ведь вызываемый SaveToFile() делает именно это - создает файл, гонит цикл записи строк, закрывает файл. Поэтому вместо того, чтобы он по дефолту писал все строки из мемо - пишите нужные строки сами в "ручном" режиме, наплевав на имеющиеся в мемо лишние строки. Ну и м.б. доступ к Lines.Count на каждой итерации цикла может давать тормоза. По крайней мере, при работе с базами данных через VCL'ные объекты я предпочитаю считывать свойство RecordCount у TTable'a в локальную переменную и потом (в цикле бегания по строкам таблицы) сравнивать счетчик именно с этой локальной переменной. Может, get-функция для Lines.Count тоже реализована тормозно - проверьте, мне самому лень это уточнять. |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
как-то так, не? Это сообщение отредактировал(а) k0rvin - 5.8.2011, 22:18 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
А если Memo заменить на StringList? Зачем вообще нужно использовать визуальный компонент TMemo, созданный для интерактивного общения с пользователем, если нет ни пользователя, ни общения? -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Zorak, тебе надо открыть файл, прочитать его весь, найти нужный блок, удалить все кроме этого блока и сохранить все обратно? Сделай по другому. Открой файл, найди нужный блок и сохрани его. И используй TStringList.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Zorak |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Очень таки дельный совет. Спасибо большое. Помогло. Ускорилось во много раз... время сократилось с 57 минут до 20 секунд -=)))... Единственное это нарушился правильный отсчет нужных мне строк (тоесть nstring1 ищет правильно, а вот с nstring2 произошел сбой), но я не думаю что это большая проблема.... и единственное что у фиг-знает-во-сколько-больше времени увеличилось - это метод Replace в регулярных выражениях... тоесть это:
Содержимое memo2.Lines:
С memo ето работало примерно 0,01 секунды, а с StringList 0.9 секунды...(... Не могу понять почему еще пока что. -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |