beste Weg, um zu analysieren, nur-text-Datei mit einer verschachtelten Struktur Informationen
Frage
Die Textdatei hat Hunderte der Einträge (format MT940 Kontoauszug)
{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
-}
Dies sollte in ein Array von Hashes wie
[{"1"=>"F01AHHBCH110XXX0000000000"},
"2"=>"I940X N2",
3 => {108=>"XBS/091502"}
etc.
} ]
Ich habe versucht, es mit dem Baum oben, aber es schien nicht der richtige Weg, weil es mehr für etwas, was Sie wollen zu tun die Berechnungen auf, und ich will nur die Informationen.
grammar Mt940
rule document
part1:string spaces [:|/] spaces part2:document
{
def eval(env={})
return part1.eval, part2.eval
end
}
/ string
/ '{' spaces document spaces '}' spaces
{
def eval(env={})
return [document.eval]
end
}
end
end
Ich habe auch versucht mit einem regulären Ausdruck
matches = str.scan(/\A[{]?([0-9]+)[:]?([^}]*)[}]?\Z/i)
aber es ist schwierig, mit Rekursion ...
Wie kann ich dieses problem lösen?
Lösung
Es gibt mehrere open-source-MT940 Parser in Java und PHP.Sie können sich den Quellcode ansehen und port es zu Ruby.Wenn Sie auf JRuby, dann können Sie verwenden die java-parser in Ihrem ruby-code.
Eine andere option ist zu verwenden OFX gem.Der Edelstein analysiert OFX-Dateien.Da es sich bei Ihrer Datei im MT940-format, müssen Sie die Datei konvertieren OFX-format, die eines der freie Wandler zur Verfügung.Dieser Ansatz ist praktisch, wenn Sie importieren, in eine batch-Jobs etc.
Referenz