|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.09.2013, 13:57 | #1 |
Новичок
Джуниор
Регистрация: 25.09.2013
Сообщений: 3
|
Поиск в тексте с использованием потока
Добрый день.
Делфи изучать только начинаю, поэтому прошу не пинать за кривость кода и алгоритма. Задача стоит такая: есть много (около 1000) текстовых (xml) файлов. В каждом файле достаточно много раз (также около 1000) встречаются открывающийся тег <CadastralNumber> и закрывающийся к нему. Между ними, собственно, сам номер. Необходимо перебрать все файлы в папке и вычленить из них списком все номера. Написал нижепреведенный код, но возникли несколько проблем: 1.Программа ищет только в первом файле из списка, дальше не идет. 2.Криво работает поток, по завершении работы программы, при закрытии крестиком падает в Access Violation. Вероятно можно было бы сделать без потока, но все зависает. В общем, прошу подсказать, как можно оптимизировать алгоритм. Код:
Последний раз редактировалось N@PsteR; 25.09.2013 в 14:01. |
25.09.2013, 14:16 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
1. Никогда, вообще никогда, никогда и ещё раз никогда не обращаться к форме или на форму из потока, без синхронизации.
2. Поток сам себя не уничтожит без FreeOnTerminate 3. Можно и без программирования, с помощью Notepad++ и регулярных выражений за минуту перебрать все файлы. 4. Запустить несколько потоков, выдав им уникальную пачку файловиз общем массы. |
25.09.2013, 14:34 | #3 | |
Новичок
Джуниор
Регистрация: 25.09.2013
Сообщений: 3
|
Цитата:
2.Так вроде прописано это у меня... Или неправильно написал? 3.Знать бы еще как это все написать там. 4.Ясно, тоже попробую. |
|
25.09.2013, 14:38 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,527
|
исключить операцию модификации строк (Delete) и возможно (если скорость будет приемлима) отказаться от потоков
для этого при поиске использовать PosEx (есть начиная с Delphi7) Код:
Код:
Код:
БЕЗ синхронизации нельзя, а при синхронизации (в предложенном изначально алгоритме) скорее всего потоки большую часть времени будут тратить на ожидание записи. использовать возможности стандартного для Windows парсера xml будет ли быстрее? не знаю, но удобнее для модификаций. правда потребует ознакомления с правилами и возможностями XML. Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 25.09.2013 в 15:08. |
25.09.2013, 15:21 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
присоединяюсь ко всему вышесказанному (имхо, особенно полезен для TC пост evg_m)!
N@PsteR, не знаю, кто и зачем Вас заманил использованием потоков, но это явно не так задача, где использование потоков даст Вам выигрыш. Используйте обычный код + замените Memo на TStringList + откажитесь от Delete и этого будет достаточно, чтобы вашу тысячу файлов обработать за несколько секунд! Впрочем, об этом уже выше всё сказано. |
25.09.2013, 15:48 | #6 | |
Новичок
Джуниор
Регистрация: 25.09.2013
Сообщений: 3
|
Цитата:
Последний раз редактировалось N@PsteR; 25.09.2013 в 15:52. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск в тексте | Terikon | Общие вопросы Delphi | 2 | 06.05.2011 23:01 |
Передача потока с использованием idtcpServer | Lvenok | Помощь студентам | 0 | 24.03.2010 19:03 |
Поиск в тексте | Whiter | Общие вопросы Delphi | 10 | 30.07.2009 15:55 |
Поиск в тексте | Rigard | Общие вопросы Delphi | 8 | 15.10.2008 00:06 |
Поиск в тексте | jone | Общие вопросы Delphi | 14 | 28.09.2008 12:42 |