文本文件包含数百个条目(格式为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)
但递归很困难......
我该如何解决这个问题?
答案 0 :(得分:2)
Java和PHP提供了几种开源MT940解析器。您可以查看源代码并将其移植到Ruby。如果你在JRuby上,那么你可以在ruby代码中使用java解析器。
其他选项是使用OFX gem。 gem解析OFX文件。由于您的文件是MT940格式,因此您必须使用可用的免费转换器将文件转换为OFX格式。如果要导入批处理作业等,这种方法很实用。
<强>参考强>