2

テキスト ファイルには、これらのエントリが何百もあります (フォーマットは 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"=>"F01AHHBCH110XXX0000000000"},
  "2"=>"I940X           N2", 
   3 => {108=>"XBS/091502"}
etc.
} ]

ツリートップで試してみましたが、正しい方法ではないようでした.計算をしたいもののためであり、情報が欲しいだけです.

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

私も正規表現で試しました

matches = str.scan(/\A[{]?([0-9]+)[:]?([^}]*)[}]?\Z/i)

しかし、再帰では難しい...

どうすればこの問題を解決できますか?

4

1 に答える 1

2

Java および PHP で使用できるオープン ソースの MT940 パーサーがいくつかあります。ソースコードを見てRubyに移植できます。JRuby を使用している場合は、Ruby コードで Java パーサーを使用できます。

その他のオプションは、OFX gemを使用することです。gem は OFX ファイルを解析します。ファイルは MT940 形式であるため、利用可能な無料のコンバーターのいずれかを使用して、ファイルを OFX 形式に変換する必要があります。このアプローチは、バッチ ジョブなどでインポートする場合に実用的です。

参照

MT940 Java パーサー。

MT940 から OFX へのコンバーター 1

MT940 から OFX へのコンバーター 2

于 2010-03-17T02:52:37.613 に答える