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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [оптимизация] Ускорение процесса. 
V
    Опции темы
Zorak
Дата 5.8.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток. Задача стоит следущая. У файле есть примерно 5000 строк. Я открываю этот файл в мемо. Ищу нужные мне данные.... Точнее блок данных... это например из 450 до 1700 строки. Далее мне надо удалить ВСЕ строки ДО 450 и ПОСЛЕ 1700.. Вопрос таков:
Как это можно сделать?

З.Ы. Идти построчно и удалять memo1.Lines.Delete(index) происходит оооочень долго... так как данных очень много.... (примерно 400 файлов по 5000 строк каждый), а мне надо как то хоть чуточку быстрее... не считая удаления все процессы занимают примерно  8 минут... с прострочным удалением примерно 57 минут... Именно поэтому я хочу ускорить процес. Посоветуйте пжлста что нибудь))
Спасибо!

Это сообщение отредактировал(а) Zorak - 5.8.2011, 18:59


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
alexnef
Дата 5.8.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Удалить из memo или файла? Если из memo то легче их отсортировать и потом добавлять в memo.
И желательно увидеть код.
PM MAIL   Вверх
Zorak
Дата 5.8.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alexnef @ 5.8.2011,  20:15)
Удалить из memo или файла? Если из memo то легче их отсортировать и потом добавлять в memo.
И желательно увидеть код.

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

Код

     for numS := 0 to memo2.Lines.Count-1 do
        begin
            if numS < nstring1 then begin
               memo2.Lines.Delete(0); nstring2 := nstring2 - 1; end else
            if numS > nstring2 then
               memo2.Lines.Delete(nstring2);
            Gauge2.Progress := Round(100*numS/linecount);
        end;
        memo2.Lines.SaveToFile(IntToStr(numF) + '.txt');


В данном случае nstring1 - это начало, тоесть ДО этого значения удаляются строки из начала файла, 
а nstring2 - это конец, тоесть удаляются ВСЕ строки ПОСЛЕ етого значения.


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
VictorTsaregorodtsev
Дата 5.8.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Zorak, ничего не удалять - а просто писать в файл строки с нужными номерами.
Вместо memo2.Lines.SaveToFile() будет сначала создание TFileStream'а с нужным именем, потом в цикле построчная запись в него нужных строк, потом удаление (закрытие) этого стрима.
Ведь вызываемый SaveToFile() делает именно это - создает файл, гонит цикл записи строк, закрывает файл. Поэтому вместо того, чтобы он по дефолту писал все строки из мемо - пишите нужные строки сами в "ручном" режиме, наплевав на имеющиеся в мемо лишние строки.
Ну и м.б. доступ к Lines.Count на каждой итерации цикла может давать тормоза. По крайней мере, при работе с базами данных через VCL'ные объекты я предпочитаю считывать свойство RecordCount у TTable'a в локальную переменную и потом (в цикле бегания по строкам таблицы) сравнивать счетчик именно с этой локальной переменной. Может, get-функция для Lines.Count тоже реализована тормозно - проверьте, мне самому лень это уточнять.
PM MAIL WWW   Вверх
k0rvin
Дата 5.8.2011, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

cat file | head -1700 | tail -450 > newfile && mv newfile file

как-то так, не?

Это сообщение отредактировал(а) k0rvin - 5.8.2011, 22:18


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
northener
Дата 6.8.2011, 00:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 12
Всего: 20



Цитата(Zorak @  5.8.2011,  18:58 Найти цитируемый пост)
З.Ы. Идти построчно и удалять memo1.Lines.Delete(index) происходит оооочень долго

А если Memo заменить на StringList?
Зачем вообще нужно использовать визуальный компонент TMemo, созданный для интерактивного общения с пользователем, если нет ни пользователя, ни общения?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Poseidon
Дата 6.8.2011, 12:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Zorak, тебе надо открыть файл, прочитать его весь, найти нужный блок, удалить все кроме этого блока и сохранить все обратно? Сделай по другому. Открой файл, найди нужный блок и сохрани его. И используй TStringList.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Zorak
Дата 6.8.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(northener @ 6.8.2011,  00:07)
А если Memo заменить на StringList?

Очень таки дельный совет. Спасибо большое. Помогло. Ускорилось во много раз... время сократилось с 57 минут до 20 секунд -=)))...
Единственное это нарушился правильный отсчет нужных мне строк (тоесть nstring1 ищет правильно, а вот с nstring2 произошел сбой), но я не думаю что это большая проблема.... и единственное что у фиг-знает-во-сколько-больше времени увеличилось - это метод Replace в регулярных выражениях... тоесть это:
Код

 str := TStringList.Create;
 r:=tRegExpr.Create;

              for k:=0 to memo2.Lines.Count-1 do
         begin
              r.Expression:=memo2.Lines.Strings[k];
              str.Text:=r.Replace(str.Text,'',true);
         end;
              r.Free;


Содержимое memo2.Lines:
Код

<head[^>]*>[^<]*<[/]head>
<script[^>]*>[^<]*<[/]script>
<!--(.*?)-->
<![^>]+>
<[^>]+>


С memo ето работало примерно 0,01 секунды, а с StringList 0.9 секунды...(... Не могу понять почему еще пока что. 


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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