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?

War es hilfreich?

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

MT940 Java-parser.

MT940 zu OFX Converter 1

MT940 zu OFX Converter 2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top