である必要があります。この質問とその他の質問に基づいて、EDIFACTで作業します。
EDIFACTは、一重引用符で区切られています(必要に応じてアポストロフィ)。
ENTRY
とNUM-ENTRIES
はあなたの友人です。私はあなたのデータを文字列、より正確には一時テーブルよりも使用可能なフォーマットに移行することをお勧めします。次に、あなたはテンポラリテーブルで何でもできます。最初にデータを "行単位"で処理するか、 "エントリ単位で入力"し、次にそれを使って必要な処理を行います。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
DEFINE TEMP-TABLE ttEdifact NO-UNDO
FIELD lineno AS INTEGER
FIELD linedata AS CHARACTER FORMAT "x(60)".
/* The string in your example ends with a delimiter (') thus your temp-table will have one empty record in the end - it could be trimmed away */
cString = "ABC+123:xy+123++23'EFG+123:xy+123++23'GHI+123:xy+123++23+mki+123'LMV++123:xy'".
DO iEntry = 1 TO NUM-ENTRIES(cString, "'").
CREATE ttEdiFact.
ASSIGN
ttEdifact.lineno = iEntry
ttEdifact.lineData = ENTRY(iEntry, cString, "'").
END.
/* Now it's up to you to do something */
FOR EACH ttEdifact WHERE ttEdifact.lineData BEGINS "ABC":
DISP ttEdiFact.
END.
はい、私はまだ私は必要な正確な情報を得るために戦って、何とか、EDIFACTと各要素の言うことを抽出することができ働いています、この質問は、解析する前に、セグメントタグをフィルタリングすることです。ありがとう。 – mac100
あなたが以前にedifactで作業していて、いくつかの作業ライブラリを持っていれば、助けてくれるでしょう。 – mac100
@ mac100 10年前にEDIFACTでの作業をやめました。 。 – Jensd