2012-03-14 4 views
6

Я ищу различные (лучшие) способы анализа структурированных текстовых данных в PHP и получения этих данных в графе объектов PHP. Я видел много разных парсеров в PHP для различных текстовых форматов файлов, но в значительной степени все они кажутся некоторой хрупкой цепочкой регулярных выражений. Должен быть лучший способ!Анализ структурированных текстовых данных в PHP

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

Итак, как вы разрабатываете парсеры, которые являются более надежными и расширяемыми, чтобы иметь дело с различными диалектами?

Вот пример MT940 заявление, взятое из this question:

{1:F01AHHBCH110XXX0000000000}{2:I940X   N2}{3:{108:XBS/091502}}{4: 
:20:XBS/091202/0001 
:25:5887/507004-50 
:28C:140/1 
:60F:C0914CHF7789, 
:61:0912021202D36,80NTRFNONREF//0887-1202-29-941 
04392579-0 LUTHY + xxx, ZUR 
:86:6034?60LUTHY + xxxx, ZUR vom 01.12.09 um 16:28 Karten-Nr. 2232 
2579-0 
:62F:C091202CHF52,2 
:64:C091302CHF52,2 
-} 
+0

Мне интересно об этом, [здесь.] (Http://stackoverflow.com/questions/7164318/parsing-markup-into-element-tree) –

+0

Бесценный. Я искал это и вернулся, чтобы добавить ссылку на проект, который я только что нашел ... Но сравнивая (ваше) имя github с именем вашей учетной записи .. Я думаю, «спасибо за запуск https://github.com/ sandermarechal/jejik-mt940 ": D – Nanne

ответ

3

Вы можете использовать этот бесплатный анализатор (GPL 2.0):

http://www.kingsquare.nl/php-mt940

вот еще:

http://www.butcher.art.pl/en/2010/09/tutoriale/parser-php-mt940-format-wyciagow-bankowych/

Надеюсь, это позволит вам отказаться от повторного использования колеса.

Итак, как вы разрабатываете синтаксические анализаторы, которые являются более надежными и расширяемыми до имеют дело с различными диалектами?

К сожалению, на этот вопрос нет простого ответа. Вам придется прятаться и ознакомиться со всеми вариантами, которые вы хотите поддержать. От короля квадратной страницы:

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

Это займет у вас много опыта и знаний. К счастью, их код может очень помочь вам.

+0

Спасибо. Особенно этот парсер из kingsquare.nl выглядит полезным. Но меня также интересует более общий дизайн парсера. На этот раз MT940 нуждается в разборе, но я сталкиваюсь с множеством (полу) структурированных форматов для различных проектов. Я хотел бы узнать еще кое-что о, например. принципы дизайна или шаблоны для построения хорошего парсера. –

+0

В итоге я написал свою собственную, названную [jejik/mt940] (https://github.com/sandermarechal/jejik-mt940). –

Смежные вопросы