2010-03-17 7 views
2

Le fichier texte a des centaines de ces entrées (le format est de relevé bancaire MT940)meilleure façon d'analyser le fichier texte brut avec une structure d'information imbriquée

{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 
-} 

Cela devrait aller dans un tableau de hachages comme

[{"1"=>"F01AHHBCH110XXX0000000000"}, 
    "2"=>"I940X   N2", 
    3 => {108=>"XBS/091502"} 
etc. 
} ] 

Je l'ai essayé avec le sommet de l'arbre, mais il ne semblait pas être le bon, parce que c'est plus pour quelque chose que vous voulez faire des calculs, et je veux juste l'information.

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 

J'ai aussi essayé avec une expression régulière

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

mais il est difficile de récursion ...

Comment puis-je résoudre ce problème?

+1

+1 pour ne pas convoquant Cthulhu. –

Répondre

2

Il existe plusieurs analyseurs MT940 open source disponibles en Java et PHP. Vous pouvez regarder le code source et le porter sur Ruby. Si vous êtes sur JRuby alors vous pouvez utiliser l'analyseur java dans votre code ruby. L'autre option consiste à utiliser le OFX gem. La pierre précieuse analyse les fichiers OFX. Puisque votre fichier est au format MT940, vous devez convertir le fichier au format OFX en utilisant l'un des convertisseurs libres disponibles. Cette approche est pratique si vous importez dans un traitement par lots, etc.

Référence

MT940 Java parser.

MT940 to OFX Converter 1

MT940 to OFX Converter 2

+0

merci, le premier convertisseur est un .exe, donc moi en tant que * nix Personne ira pour les solutions java et l'adapter à ruby – Beffa