![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Парсинг текстовых файлов [D6, WinXP]
alexts © (2004-08-19 20:43:00)Доброго времени суток.
Есть. например, счет, в текстовом файле, выгруженный из учетной системы к базе данных которой нет доступа.
Посоветуйте как парсить
Заранее всем спасибо!!!
Mim1 (2004-08-20 20:32:00) [1]Думается что средний комп это чтото вроде гигагерцового P3. :)
Андрей Сенченко (2004-08-20 20:09:00) [2]Mim1 © (20.08.04 20:02) [23]
3 метра за 20 минут ?
Имеется в виду средняя XT-шка ?
Mim1 (2004-08-20 20:02:00) [3]Всетаки у вас на разбор файла из
> [14] alexts (20.08.04 14:18)
размером 3 мб уходит 40 часов? :) Кул.
Давайте я вам сделаю так что это за 20 минут и разберется и в отчет загонется на среднем компе.
Андрей Сенченко (2004-08-20 18:46:00) [4]alexts (20.08.04 16:57) [21]
Понимаешь, изначально Твой вопрос заключался лишь в "Как парсить"
Лично я в Твоем конкретном случае простро создал бы Recordи проходя по файлу постепенно заполнял бы его поля. Структура фала, при которой строки с одинаковыми порядковыми номерами однозначно содержат одну и туже информацию ( причем для некоторых данных можно заведомо объявлять типы String[10]или byteнапример) вполне позволяет это сделать.
Но если нужно еще и сокращение ресурсов на выборку - это сложнее. Ибо нужно исходить уже не только из структуры файлов, но и частоты и способов их получения. Тут могут быть свои хитрости
alexts (2004-08-20 16:57:00) [5]Ладно, я понял что эта тема для обсуждения не на форуме, а за пивом.
Всем спасибо огромное.
SergP (2004-08-20 14:42:00) [6]Может проще задействовать какую-нить библиотеку для работы с регулярными выражениями?
[lamer]Barmaglot (2004-08-20 14:37:00) [7]Е-мое... Насколько я понимаю проблема не в скорости считывания файла с диска, скорее всего он все равно записывается в память (ты же не закрываешь файл после каждой записи?) проблема в скорости сравнения имеющегося шаблона с записью в файле. А тут тебе массивы не помогут...Я бы посмотрел более быстрые версии сравнения и сортировки...
alexts (2004-08-20 14:25:00) [8]
> Digitman © (20.08.04 13:46) [12]
Абсолютно верно!!! Так и есть, так и сделано!!! Интересует сам подход, т.е. мне не нравится пословное чтение и сравнение, хочу так например: создал матрицу-шаблон, загнал туда из файла шаблон, наложил на файл получил данные. Как ВАМ такая идея?
PS. матрица имеется ввиду двумерный массив
Digitman (2004-08-20 14:24:00) [9]
> Андрей Сенченко © (20.08.04 14:19) [16]
> размеры выводимых полей в таких программах обычно прошиты
> очень жестко
в табличной части - да, скорей всего ... в этом-то и хотелось убедиться ..
Андрей Сенченко (2004-08-20 14:19:00) [10]Digitman © (20.08.04 13:46) [12]
На самом деле на Ехеле свет клином не сошелся.
Значительно важнее другое - наличие слов "псевдографика" и "счета" на мой взгляд предполагает наличие ДОСовского приложения, которое эти самые счета с псевдографикой гонит в файлы.
Осталось посмотреть эту самую ДОСовскую программу - размерывыводимых полей в таких программах обычно прошиты очень жестко, что позволяет построить встречный жесткий парсер по POS-ам или четко определенным символам псевдографики.
ЮрийК (2004-08-20 14:18:00) [11]CreateFileMapping
MapViewOfFile
Ищи по этим словам темы, где это уже обсуждалось
alexts (2004-08-20 14:18:00) [12]Вот пример файлика:
СЧЕТ-ФАКТУРА № 21243234
Счет клиента : 23432432, абонент 34634645
парпарпав
Дата : 01-08-2004 00:00:00
ОСТАТОК НА : 01-07-2004 00:00:00 167.79 ГРН КРЕДИТ
Поступившие платежи :
авансовые 0.00 ГРН
дилерам 0.00 ГРН
СтарТайм 150.00 ГРН
Корректировки платежей 0.00 ГРН
---------------------------------------------------------------------------------------
Итого: 150.00 ГРН
Начислено за период:
ежемесячная абонентская плата 16.88 ГРН
исходящие внутри сети 56.71 ГРН
исходящие местные,междугородние звонки 122.64 ГРН
услуги текст 6.18 ГРН
исходящие внутри закрытой абонентской группы 6.36 ГРН
---------------------------------------------------------------------------------------
Итого (без налогов) : 208.77 ГРН
ПФ 12.53 ГРН
НДС 41.76 ГРН
---------------------------------------------------------------------------------------
Итог (со всеми налогами): 263.06 ГРН
---------------------------------------------------------------------------------------
Всего : 263.06 ГРН
ОСТАТОК НА : 01-08-2004 00:00:00 54.73 ГРН КРЕДИТ
Сумма авансового платежа 300.00 ГРН
Внимание! При заполнении платежного поручения на авансовый платеж
в графе "Назначение платежа" следует писать:
"Оплата за услуги связи на л/с:437563 абонент : 465327"
---------------------------------------------------------------------------------------
аврппараврпарвпарп
паврпарпаврпрпа
Платежные реквизиты:
т/с 4564565463654
трататататататататат
МФО 436563, ЕДРПОУ 46543737 #6734534
т/с 5485487438743
трататататататататат трататататататататат
МФО 324537, ЕДРПОУ 32645237 Адрес кв. х
Город
Для аб.блявора р-на:
т/с 3427636734743 х
такомто банке, МФО 32564623 437672
Думкин (2004-08-20 13:54:00) [13]> [11] alexts (20.08.04 13:37)
Избранные места - я имел ввиду как с текстом работа идет. Может и хорошо все, но иногда попадается - когда delete посимвольно применяют или s := s + a миллионы раз. :)
Digitman (2004-08-20 13:46:00) [14]
> alexts (20.08.04 13:37) [11]
приведи сюда фрагмент текста их такого файла - шапка, табл.часть, подвал ...
всю табличную часть приводить необязательно, из нее достаточно пары строк
alexts (2004-08-20 13:37:00) [15]>3 Мб - долго? Можно некоторые избранные места?
Да в томто и дело что нет интерес представляет вся инфа в файле
Думкин (2004-08-20 13:29:00) [16]> [9] alexts (20.08.04 13:28)
> думаю что в БД тянуть обязательно, я думаю что с БД работаю
> эффективно, много времени уходит на разбор файла, есть файлы
> рамером около 3Мб,
3 Мб - долго? Можно некоторые избранные места?
alexts (2004-08-20 13:28:00) [17]думаю что в БД тянуть обязательно, я думаю что с БД работаю эффективно, много времени уходит на разбор файла, есть файлы рамером около 3Мб, поэтому интересует, именно, алгоритмы разбора текста
Спасибо
Digitman (2004-08-20 11:51:00) [18]псевдографика, говоришь ? .. мда... тогда дело хреново, Эксел здесь не помощник, разумеется ..
> написали программу которая разберает по словам файл и затягивает
> в базу
где в этой цепочке узкое место ? обязательно ли вообще "затягивание в базу" ? может здесь и есть узкое место из-за неэффективного алгоритма работы с СУБД ?
alexts (2004-08-20 11:38:00) [19]задача следующаю:
нам присылают, по email счета которые нужно печатать,
происходит это 1 раз в месяц, кол-во счетов около 200000
формат файла текст для печати(с псевдографикой), т.е. никаких раделителей между данными нет, написали программу которая разберает по словам файл и затягивает в базу, оттуда выгружаем ф FastReport нормальные печатные формы и печатаем. Весь процесс от недели до 10 дней. Загрузка данных гдето 40 часов. Вот и думаю может есть какие алгоритмы которые позволят это делать пошустрее
Digitman (2004-08-20 11:04:00) [20]
> KSergey © (20.08.04 10:55) [5]
> Но вот с точки зрения ресурсов при импорте... ;)
ну автор же молчит как партизан, не желая раскрывать тайну о том, как часто и при каких условиях требуется осуществлять экспорт/импорт ..)