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

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

Парсинг текстовых файлов [D6, WinXP]


Страницы:   1 2

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]


> Но вот с точки зрения ресурсов при импорте... ;)


ну автор же молчит как партизан, не желая раскрывать тайну о том, как часто и при каких условиях требуется осуществлять экспорт/импорт ..)


Страницы:   1 2

Наверх

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