Разбор структурированных текстовых данных в PHP - PullRequest
6 голосов
/ 15 марта 2012

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

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

Итак, как вы разрабатываете парсеры, которые более устойчивы и расширяемы для работы с различными диалектами?Вот пример выражения MT940, взятый из этого вопроса :

{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
-}

1 Ответ

3 голосов
/ 15 марта 2012

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

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

Вот еще:

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

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

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

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

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

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

...