2012-03-14 20 views
6

Estoy buscando varias (mejores) formas de analizar datos de texto estructurados en PHP y obtener esos datos en un gráfico de objetos PHP. He visto muchos analizadores en PHP para una variedad de formatos de archivo basados ​​en texto, pero casi todos parecen ser una cadena frágil de expresiones regulares. ¡Debe haber una mejor manera!Análisis de datos de texto estructurado en PHP

En este caso específico, estoy buscando analizar los archivos MT940 (transacciones de cuentas bancarias). Pero también he tenido el mismo problema con otros formatos de archivo. Invariablemente termino con una gran cadena de expresiones regulares que se vuelve complejo de mantener, especialmente cuando se necesita soportar formatos diferentes. MT940 también tiene este problema. MT940 no es un formato estrictamente definido y casi todos los bancos usan un dialecto ligeramente diferente.

Entonces, ¿cómo diseñar analizadores que sean más robustos y extensibles para tratar con diferentes dialectos?

He aquí un ejemplo comunicado MT940, tomada de 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

Me pregunto sobre esto yo mismo, [aquí.] (Http://stackoverflow.com/questions/7164318/parsing-markup-into-element-tree) –

+0

No tiene precio. Estaba buscando esto, y volví a agregar un enlace a un proyecto que acabo de encontrar ... Pero comparando (su) nombre de github con su nombre de cuenta ... supongo que "gracias por comenzar https://github.com/ sandermarechal/jejik-mt940 ": D – Nanne

Respuesta

3

podría utilizar este analizador libre (GPL 2.0):

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

Aquí hay otro:

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

Espero que esto te permita renunciar a reinventar la rueda en esto.

Entonces, ¿cómo diseñar analizadores que sean más robustos y extensibles a frente a diferentes dialectos?

Desafortunadamente, no hay una respuesta fácil para esto. Tendrías que abrocharte y familiarizarte con todas las variantes que deseas apoyar. Desde la página cuadrado rey:

El analizador intenta determinar qué origina banco es a partir de a través de las primeras líneas del archivo y luego carga el motor por banco.

Esto requerirá mucha experiencia y estudio. Afortunadamente, su código podría ayudarlo inmensamente.

+0

Gracias. Especialmente ese analizador de kingsquare.nl parece útil. Pero también me interesa un diseño de analizador más general. Esta vez es MT940 el que necesita un análisis sintáctico, pero encuentro muchos formatos (semi) estructurados para varios proyectos. Me gustaría saber un poco más sobre, por ejemplo, principios de diseño o patrones para construir un buen analizador. –

+0

Terminé escribiendo el mío, llamado [jejik/mt940] (https://github.com/sandermarechal/jejik-mt940). –

Cuestiones relacionadas