il modo migliore per analizzare un file di testo semplice con una struttura informativa nidificata

StackOverflow https://stackoverflow.com/questions/2459292

Domanda

Il file di testo contiene centinaia di queste voci (il formato è estratto conto bancario 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
-}

Questo dovrebbe andare in un array di hash come

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

L'ho provato con la cima dell'albero, ma non sembrava essere la strada giusta, perché è più per qualcosa su cui vuoi fare calcoli e voglio solo le informazioni.

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

Ho provato anche con un'espressione regolare

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

ma è difficile con la ricorsione...

Come posso risolvere questo problema?

È stato utile?

Soluzione

Sono disponibili diversi parser MT940 open source in Java e PHP.Puoi guardare il codice sorgente e portarlo su Ruby.Se utilizzi JRuby, puoi utilizzare il parser Java nel tuo codice Ruby.

Un'altra opzione è utilizzare il file Gemma OFX.La gemma analizza i file OFX.Poiché il tuo file è in formato MT940, devi convertirlo nel formato OFX utilizzando uno dei convertitori gratuiti disponibili.Questo approccio è pratico se si importa in un lavoro batch, ecc.

Riferimento

Analizzatore Java MT940.

Convertitore da MT940 a OFX1

Convertitore da MT940 a OFX2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top