أفضل طريقة تحليل ملف نص عادي مع المتداخلة بنية المعلومات

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

سؤال

ملف نصي يحتوي على مئات من هذه الإدخالات (شكل 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)

ولكن من الصعب مع العودية ...

كيف يمكنني حل هذه المشكلة ؟

هل كانت مفيدة؟

المحلول

هناك عدة مفتوحة المصدر MT940 موزعي المتاحة في جافا و PHP.يمكنك إلقاء نظرة على التعليمات البرمجية المصدر و المنفذ إلى روبي.إذا كنت على JRuby ثم يمكنك استخدام جافا محلل في روبي البرمجية.

الخيار الآخر هو استخدام فكس جوهرة.جوهرة يوزع فكس الملفات.منذ الملف في MT940 الشكل ، يجب أن تحويل الملف إلى فكس تنسيق استخدام أحد مجانا محولات المتاحة.هذا النهج هو عملي إذا كنت تقوم باستيراد في مجموعة العمل.... الخ

المرجعية

MT940 جافا محلل.

MT940 إلى فكس تحويل 1

MT940 إلى فكس Converter 2

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top