Melhor maneira de analisar o arquivo de texto simples com uma estrutura de informação aninhada

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

Pergunta

O arquivo de texto possui centenas dessas entradas (o formato é o extrato bancário do 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
-}

Isso deve entrar em uma variedade de hashes como

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

Eu tentei com o topo da árvore, mas parecia não ser o caminho certo, porque é mais para algo que você deseja fazer cálculos e eu só quero as informações.

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

Eu também tentei com uma expressão regular

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

Mas é difícil com a recursão ...

Como posso resolver esse problema?

Foi útil?

Solução

Existem vários analisadores de código aberto MT940 disponíveis em Java e PHP. Você pode olhar para o código -fonte e portá -lo para Ruby. Se você estiver no Jruby, poderá usar o analisador Java em seu código Ruby.

Outra opção é usar o Ofx Gem. O GEM analisa arquivos OFX. Como seu arquivo está no formato MT940, você deve converter o arquivo em formato OFX usando um dos conversores gratuitos disponíveis. Essa abordagem é prática se você estiver importando em um trabalho em lote etc.

Referência

MT940 Java Parser.

MT940 para OFX Converter 1

MT940 para OFX Converter 2

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top