Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

Парсинг текстовых файлов   Найти похожие ветки 

 
alexts   (2004-08-19 20:43) [0]

Доброго времени суток.

Есть. например, счет, в текстовом файле, выгруженный из учетной системы к базе данных которой нет доступа.

Посоветуйте как парсить

Заранее всем спасибо!!!


 
KSergey ©   (2004-08-19 20:52) [1]

Ну как.. Как обычно
Выделять стандартные имеющиеся в нем куски, среди ни и искать то, что меняется...
Пригодятся ф-ции работы с файлами, а так же Pos.


 
Rouse_ ©   (2004-08-19 21:14) [2]

Не сочти за стеб, но это аналог: есть какаято фигня, как сделать конфетку?...

ЗЫ: Вообщето желательно прежде чем задать вопрос разобраться хотябы в азах парсинга и иметь представление о сути вопроса...

ЗЗЫ: Главный элемент - ключевое поле, которое может быть представленно абсолютно любым способом, но должно быть тебе заранее известно...


 
alexts   (2004-08-20 10:39) [3]

Я имел ввиду, какие вы используете для этого средства, компоненты, алгоритмы. ИМХО построчное чтение из файла и разбор по словам не очень гуд. Может есть какието приемы которые позволили сократить ресурсы на обработку.

Спасибо


 
Digitman ©   (2004-08-20 10:46) [4]


> alexts   (20.08.04 10:39) [3]


если текст этот можно без проблем импортировать, например, в раб.лист Excel (т.е. формат выгруженных в текст.файл позволяет это сделать без особого геморроя), то и парсинг никакой не нужен - все уже по сути готово, Excel сам все сделает, останется только прочитать из интересующих ячеек интересующие значения


 
KSergey ©   (2004-08-20 10:55) [5]

> [3] alexts   (20.08.04 10:39)

Невозможно импортировать файл не прочитав его ;)
Так что других средств нет.

>[4] Digitman ©   (20.08.04 10:46)

Ну, в принципе не плохо (с точки зрения затраты ресурсов на нажатие кнопок при набивании проги). Но вот с точки зрения ресурсов при импорте... ;)


 
Digitman ©   (2004-08-20 11:04) [6]


> KSergey ©   (20.08.04 10:55) [5]


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


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


 
alexts   (2004-08-20 11:38) [7]

задача следующаю:
нам присылают, по email счета которые нужно печатать,
происходит это 1 раз в месяц, кол-во счетов около 200000
формат файла текст для печати(с псевдографикой), т.е. никаких раделителей между данными нет, написали программу которая разберает по словам файл и затягивает в базу, оттуда выгружаем ф FastReport нормальные печатные формы и печатаем. Весь процесс от недели до 10 дней. Загрузка данных гдето 40 часов. Вот и думаю может есть какие алгоритмы которые позволят это делать пошустрее


 
Digitman ©   (2004-08-20 11:51) [8]

псевдографика, говоришь ? .. мда... тогда дело хреново, Эксел здесь не помощник, разумеется ..


> написали программу которая разберает по словам файл и затягивает
> в базу


где в этой цепочке узкое место ? обязательно ли вообще "затягивание в базу" ? может здесь и есть узкое место из-за неэффективного алгоритма работы с СУБД ?


 
alexts   (2004-08-20 13:28) [9]

думаю что в БД тянуть обязательно, я думаю что с БД работаю эффективно, много времени уходит на разбор файла, есть файлы рамером около 3Мб, поэтому интересует, именно, алгоритмы разбора текста

Спасибо


 
Думкин ©   (2004-08-20 13:29) [10]

> [9] alexts   (20.08.04 13:28)
> думаю что в БД тянуть обязательно, я думаю что с БД работаю
> эффективно, много времени уходит на разбор файла, есть файлы
> рамером около 3Мб,

3 Мб - долго? Можно некоторые избранные места?


 
alexts   (2004-08-20 13:37) [11]

>3 Мб - долго? Можно некоторые избранные места?
Да в томто и дело что нет интерес представляет вся инфа в файле


 
Digitman ©   (2004-08-20 13:46) [12]


> alexts   (20.08.04 13:37) [11]


приведи сюда фрагмент текста их такого файла - шапка, табл.часть, подвал ...

всю табличную часть приводить необязательно, из нее достаточно пары строк


 
Думкин ©   (2004-08-20 13:54) [13]

> [11] alexts   (20.08.04 13:37)

Избранные места - я имел ввиду как с текстом работа идет. Может и хорошо все, но иногда попадается - когда delete посимвольно применяют или s := s + a миллионы раз. :)


 
alexts   (2004-08-20 14:18) [14]

Вот пример файлика:

СЧЕТ-ФАКТУРА № 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 14:18) [15]

CreateFileMapping
MapViewOfFile
Ищи по этим словам темы, где это уже обсуждалось


 
Андрей Сенченко ©   (2004-08-20 14:19) [16]

Digitman ©   (20.08.04 13:46) [12]

На самом деле на Ехеле свет клином не сошелся.
Значительно важнее другое - наличие слов "псевдографика" и "счета" на мой взгляд предполагает наличие ДОСовского приложения, которое эти самые счета с псевдографикой гонит в файлы.

Осталось посмотреть эту самую ДОСовскую программу - размеры выводимых полей в таких программах обычно прошиты очень жестко, что позволяет построить встречный жесткий парсер по POS-ам или четко определенным символам псевдографики.


 
Digitman ©   (2004-08-20 14:24) [17]


> Андрей Сенченко ©   (20.08.04 14:19) [16]


> размеры выводимых полей в таких программах обычно прошиты
> очень жестко


в табличной части - да, скорей всего ... в этом-то и хотелось убедиться ..


 
alexts   (2004-08-20 14:25) [18]


> Digitman ©   (20.08.04 13:46) [12]

Абсолютно верно!!! Так и есть, так и сделано!!! Интересует сам подход, т.е. мне не нравится пословное чтение и сравнение, хочу так например: создал матрицу-шаблон, загнал туда из файла шаблон, наложил на файл получил данные. Как ВАМ такая идея?

PS. матрица имеется ввиду двумерный массив


 
[lamer]Barmaglot ©   (2004-08-20 14:37) [19]

Е-мое... Насколько я понимаю проблема не в скорости считывания файла с диска, скорее всего он все равно записывается в память (ты же не закрываешь файл после каждой записи?) проблема в скорости сравнения имеющегося шаблона с записью в файле. А тут тебе массивы не помогут...Я бы посмотрел более быстрые версии сравнения и сортировки...


 
SergP ©   (2004-08-20 14:42) [20]

Может проще задействовать какую-нить библиотеку для работы с регулярными выражениями?


 
alexts   (2004-08-20 16:57) [21]

Ладно, я понял что эта тема для обсуждения не на форуме, а за пивом.

Всем спасибо огромное.


 
Андрей Сенченко ©   (2004-08-20 18:46) [22]

alexts   (20.08.04 16:57) [21]

Понимаешь, изначально Твой вопрос заключался лишь в "Как парсить"

Лично я в Твоем конкретном случае простро создал бы Record и проходя по файлу постепенно заполнял бы его поля. Структура фала, при которой строки с одинаковыми порядковыми номерами однозначно содержат одну и туже информацию ( причем для некоторых данных можно заведомо объявлять типы String[10] или byte например) вполне позволяет это сделать.

Но если нужно еще и сокращение ресурсов на выборку - это сложнее. Ибо нужно исходить уже не только из структуры файлов, но и частоты и способов их получения. Тут могут быть свои хитрости


 
Mim1 ©   (2004-08-20 20:02) [23]

Всетаки у вас на разбор файла из
> [14] alexts   (20.08.04 14:18)
размером 3 мб уходит 40 часов? :) Кул.

Давайте я вам сделаю так что это за 20 минут и разберется и в отчет загонется на среднем компе.


 
Андрей Сенченко ©   (2004-08-20 20:09) [24]

Mim1 ©   (20.08.04 20:02) [23]

3  метра за 20 минут ?
Имеется в виду средняя XT-шка ?


 
Mim1 ©   (2004-08-20 20:32) [25]

Думается что средний комп это чтото вроде гигагерцового P3. :)



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
1-1093003639
kukuikar
2004-08-20 16:07
2004.09.05
Я изменил Dialogs.pas. Как мне переделать Dialogs.dcu?


14-1092401872
Prohodil Mimo
2004-08-13 16:57
2004.09.05
Где найти справочник имён?


6-1088709945
Скив
2004-07-01 23:25
2004.09.05
JavaScript и WebBrowser


14-1092426242
Паскальные надписи
2004-08-13 23:44
2004.09.05
Приступ болезни "оптимизация" - типы


1-1093081640
Рома
2004-08-21 13:47
2004.09.05
Что-то не то с библиотекой