중첩 된 정보 구조로 일반 텍스트 파일을 구문 분석하는 가장 좋은 방법

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

문제

텍스트 파일에는 수백 개의 항목이 있습니다 (형식은 MT940 Bank 문입니다)

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

하지만 재귀는 어렵다 ...

이 문제를 어떻게 해결할 수 있습니까?

도움이 되었습니까?

해결책

Java 및 PHP에는 몇 가지 오픈 소스 MT940 파서가 있습니다. 소스 코드를보고 루비로 포트 할 수 있습니다. Jruby에 있다면 Ruby 코드에서 Java Parser를 사용할 수 있습니다.

다른 옵션은 ofx 보석. gem parses ofx 파일. 파일은 MT940 형식이므로 사용 가능한 무료 변환기 중 하나를 사용하여 파일을 OFX 형식으로 변환해야합니다. 이 접근법은 배치 작업에서 가져 오는 경우 실용적입니다.

참조

MT940 Java Parser.

MT940에서 OFX 변환기 1

MT940에서 OFX 변환기 2

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top