![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Распарсить большой текстовый файл [D7, NT4, Win2k, WinXP]
Brenagwynn © (2005-02-04 13:56:00)Есть текстовый файл приличных размеров (минимум порядка 50000 строк), представляющий собой таблицу (с известными разделителями и известным кол-вом столбцов). Может коллективный разум подкинет какой-нить алгоритм, или хотя бы идею, как его побыстрее распарсить? Понятно, что можно тупо построчно парсить (загрузив в стринглист, например), но может вдруг найдется что-нить получше...
Brenagwynn (2005-02-04 15:21:00) [21]Результаты тестов (50000 строк, файл 3 Мб):
одной строкой - 73145 мсек
стринглист - 73736 мсек
Вывод: в общем, эквипенисуально. Но стринглистом удобнее.
Александр Иванов (2005-02-04 14:37:00) [22]Brenagwynn (04.02.05 14:35) [14]
Согласен.
Тогда см. [4] :).
Brenagwynn (2005-02-04 14:35:00) [23]
> Александр Иванов © (04.02.05 14:28) [13]
> Какая разница, через что, все способы внутри будут содержать
> либо ReadLn, либо ReadBuffer.
...или к ReadFile. Согласен.
Александр Иванов (2005-02-04 14:28:00) [24]Brenagwynn (04.02.05 14:26) [12]
Какая разница, через что, все способы внутри будут содержать либо ReadLn, либо ReadBuffer. Второй быстрей, поэтому я тебе его и порекомендовал.
Brenagwynn (2005-02-04 14:26:00) [25]
> AssignFile + Readln + F1
Ой. А у меня такое подозрение, что это будет один из самых медленных способов.
stone (2005-02-04 14:25:00) [26]
> Понятно, что можно тупо построчно парсить (загрузив в стринглист,
> например), но может вдруг найдется что-нить получше...
AssignFile + Readln + F1
Brenagwynn (2005-02-04 14:25:00) [27]
> А почему ты не хочешь загнать ее в таблицу ? Что там за
> условия такие, религия не позволяет ? :)
Ну в общем, да. Есть такое божество, Условия Заказчика называется :))) На самом деле ситуация такая: приходит текстовый файл - отчет от пропускной системы (турникеты с карточками). Его нужно переварить как можно быстрее на довольно слабой тачке (на которой и офиса-то может не быть).
Александр Иванов (2005-02-04 14:22:00) [28]esu © (04.02.05 14:21) [8]
Изначально в вопросе говорилось о скорости, а Эксель - очень не идеальный вариант.
esu (2005-02-04 14:21:00) [29]
> Brenagwynn (04.02.05 14:15) [5]
А почему ты не хочешь загнать ее в таблицу ? Что там за условия такие, религия не позволяет ? :)
Александр Иванов (2005-02-04 14:20:00) [30]Brenagwynn (04.02.05 14:18) [6]
(где-то порядка 3-5 Мб).
Тем более.
Brenagwynn (2005-02-04 14:18:00) [31]
> Александр Иванов © (04.02.05 14:13) [4]
> Для увеличения скорости я бы считывал все в одну строку,
> причем за раз, а ее бы парсил. Если текст больше 2 Гб, то
> сначала 2Гб, потом остаток последней строки + остаток из
> файла, и т.д.
Мнэээ... А собсно почему это будет быстрее, чем загрузка в тот же стринглист и построчное парсение? Можно, конечно, и так попробовать... А файл там будет не 2 Гб (где-то порядка 3-5 Мб).
Brenagwynn (2005-02-04 14:15:00) [32]Перегон в excel - идея хорошая, но увы, не катит (в тех условиях, в которых я нахожусь). А вот насчет провайдера - эт надо попробовать и сравнить. Может и не медленнее будет.
Александр Иванов (2005-02-04 14:13:00) [33]Для увеличения скорости я бы считывал все в одну строку, причем за раз, а ее бы парсил. Если текст больше 2 Гб, то сначала 2Гб, потом остаток последней строки + остаток из файла, и т.д.
esu (2005-02-04 14:10:00) [34]
> Brenagwynn (04.02.05 13:56)
Перегнать в excelе в какой-то более удобный формат для базы и дальше уже работать как с таблицей...
TUser (2005-02-04 14:07:00) [35]Я такую штуку через StringList делал. Очень не факт, что другие способы будут быстрее, особенно тот, который через TDataSet.
wl (2005-02-04 14:04:00) [36]1.Создать объект excel В памяти и прочитать в него файлик.
2.должен быть провайдер базы данных для баз в виде таблиц в txt файле - но это всё имхо, сам ничего подобного не делал, только парсил построчно.