Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Распарсить большой текстовый файл [D7, NT4, Win2k, WinXP]


Страницы:   1 2

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 файле - но это всё имхо, сам ничего подобного не делал, только парсил построчно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо