Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.032 c
1-1092599700
HSD
2004-08-15 23:55
2004.09.05
Пересечение классов


1-1092981649
denmin
2004-08-20 10:00
2004.09.05
Можно ли отловить экстренное закрытие программы?


9-1084693130
djxxx
2004-05-16 11:38
2004.09.05
Как создать форму в DLL


14-1092334218
Николай
2004-08-12 22:10
2004.09.05
Можно ли скачать в Internet Delphi 7


4-1090673558
Случайно забежавший
2004-07-24 16:52
2004.09.05
Строка в двоичном коде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский