2012-03-14 12 views
6

Sto cercando vari modi (migliori) di analizzare i dati di testo strutturato in PHP e ottenere tali dati in un grafico di oggetti PHP. Ho visto molti parser diversi in PHP per una varietà di formati di file basati su testo, ma quasi tutti sembrano essere una catena fragile di espressioni regolari. Ci deve essere un modo migliore!Analisi di dati di testo strutturato in PHP

In questo caso specifico, sto cercando di analizzare i file MT940 (transazioni di conto bancario). Ma ho incontrato lo stesso problema con altri formati di file. Invariabilmente finisco con una grande catena di regex che diventa complessa da mantenere, specialmente quando devono essere supportati diversi formati. MT940 ha anche questo problema. MT940 non è un formato strettamente definito e praticamente tutte le banche usano un dialetto leggermente diverso.

Quindi, come progettare parser più robusti ed estendibili per gestire dialetti diversi?

Ecco una dichiarazione MT940 esempio, tratto da 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

Mi sto chiedendo questo, [qui.] (Http://stackoverflow.com/questions/7164318/parsing-markup-into-element-tree) –

+0

Priceless. Stavo cercando questo, e sono tornato per aggiungere un collegamento a un progetto che ho appena trovato .... Ma confrontando il tuo nome github con il nome del tuo account .. Immagino "grazie per l'avvio di https://github.com/ sandermarechal/jejik-mt940 ": D – Nanne

risposta

3

è possibile utilizzare questo parser libero (GPL 2.0):

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

Ecco un altro:

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

Speriamo che questo ti permetta di rinunciare a reinventare la ruota su questo.

Quindi, come si fa a progettare parser che sono più robusti e estendibile a accordo con diversi dialetti?

Purtroppo non c'è una risposta facile a questo. Dovresti allinearti e familiarizzare con tutte le varianti che desideri supportare. Dalla pagina di re quadrato:

Il parser tenta di determinare quali di origine bancaria è da via le prime righe del file e quindi carica il motore per banca.

Questo richiederà molta esperienza e studio. Fortunatamente, il loro codice potrebbe aiutarti immensamente.

+0

Grazie. Soprattutto quel parser di kingsquare.nl sembra utile. Ma mi interessa anche il design più generale del parser. Questa volta è MT940 che ha bisogno di analisi, ma mi imbatto in molti formati (semi) strutturati per vari progetti. Mi piacerebbe saperne di più su ad es. principi di progettazione o modelli per la costruzione di un buon parser. –

+0

Ho finito per scrivere il mio, chiamato [jejik/mt940] (https://github.com/sandermarechal/jejik-mt940). –