![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
sokolik117845 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.7.2011 Репутация: нет Всего: нет |
Как упростить данный код? Жутко тормозит при обработке больших файлов!
|
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Хранить данные в БД. Если же требуется работа именно с .txt, то логичней читать файл построчно через Assign...Readln, нежели грузить его целиком в стринглист.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
TStreamReader/TStreamWriter.
|
|||
|
||||
sokolik117845 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.7.2011 Репутация: нет Всего: нет |
Необходима работа именно с txt файлом, если не трудно киньте кто-нибудь код!
|
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Как-то так (без обработки ошибок):
|
|||
|
||||
sokolik117845 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.7.2011 Репутация: нет Всего: нет |
Если у кого еще есть варианты буду признателен!
|
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Это сообщение отредактировал(а) Данкинг - 19.4.2012, 00:09 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Не обижайтесь, но во-первых это ваше решение не соответствует задаче в топике. А во-вторых задаче не соответствует ваше высказывание
Ведь в задаче требуется некий вариант сортировки/выбора из списка неких отдельных элементов с целью создать по некоему условию несколько новых списков. Мой исторически любимый метод доступа к текстовым файлам "Assign,Readln,Writeln" совершенно очевидно будет жестоко тормозить в отличие от методов чтения файла "целиком" с последующей обработкой строк в памяти. А автору я посоветую учесть что Application.ProcessMessage конечно вещь хорошая и полезная. Но она в чём-то похожа на одеколон/духи. И то и другое хорошо в меру, а избыток и того и другого обычно портит жизнь всем. И уж тем более задуматься на вопросом - зачем вызывать
Это сообщение отредактировал(а) northener - 19.4.2012, 00:39 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Почему это, не понял? Тоже не понял. Т.е. построчное чтение будет тормозить? С какой стати? Я сам для подобного использую Assign...Read и ничего не тормозит, а уж тем более по сравнению, как если бы я в стринглист грузил. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 22 Всего: 50 |
Для подобных задач нужно использовать data-driven подход. Достаточно префиксы телефонов сопоставить с номерами групп. Можно даже хранить эти ассоциации в файле, чтобы для добавления нового префикса или группы не было необходимости перекомпилировать код. Текущий подход с простынями однотипных проверок — частый гость на удивительном коде.
По поводу радостей вида AssignFile/CloseFile. Хватит. Остановитесь. Это из процедурного мира. Ну серьезно, сколько еще десятилетий должно пройти, чтобы этот подход вымер. Есть гораздо более удобные сущности TStreamReader/TStreamWriter и прочие. Далее про Application.ProcessMessage. В большинстве случаев это очень грязный хак. И это именно тот случай. Ознакомьтесь с потоками — это путь развития правильного программиста. И последнее. Если можно полностью не загружать файл в память, то нужно его не загружать. Вариант с TStringList несколько быстрее, но при достаточно большом размере исходного файла памяти просто не хватит. Это сообщение отредактировал(а) Qu1nt - 19.4.2012, 10:44 |
|||
|
||||
Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
А зачем вымирать простым, наглядным и понятным операторам? ![]()
Кому как. -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Вот тут уже я не соглашусь с таким категоричным суждением. Не стоит бездумно делать любое приложение многопоточным! Как, в прочем, вообще не стоит применять какой-то (любой) инструмент бездумно. А в случае автора доппоток скорее всего нафиг не нужен! Использовать Application.ProcessMessage - самое нормальное решение, только нужно им правильно воспользоваться. И особенно я против советов типа "Ознакомьтесь с потоками — это путь развития правильного программиста." Сначала нужно ознакомиться с базовыми знаниями, а уж потом с "расширенными".
А тут во всём соглашусь с Данкигом. Простая обычная отвёртка никогда не умрёт несмотря ни на какие изобретения шуруповертов и спецотверток, которые позволяют работать не переставляя саму отвертку в новое положение.
Вот тут имхо (которое я забыл указать в том своём посте). Файловые операции упираются в работу с физическим диском. Оптимизация чтения файла со стороны ОС вроде позволяет наиболее быстро считать файл целиком, нежели неопределенными кусками через неопределенные промежутки времени. Это сообщение отредактировал(а) northener - 20.4.2012, 01:09 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |