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 回答