ABC + 123:XY + 123 ++ 23' EFG + 123:XY + 123 ++ 23' GHI + 123:XY + 123 ++ 23 + + MKI 123' LMV ++ 123 :XY'
我有上面的字符串。撇号(')充当终止符,表示段的结尾。 因此ABC + 123:xy + 123 ++ 23是一个段,它的开始标记是三个字符ABC,它是唯一的。 现在我需要根据这些开始标记修剪此字符串,例如我需要仅以ABC和LMV开始的段。 结果字符串应该是ABC + 123:xy + 123 ++ 23' LMV ++ 123:xy'
答案 0 :(得分:3)
基于此问题以及您与EDIFACT合作的其他问题。
EDIFACT以单引号'分隔。 (如果你愿意的话,还是撇号)。
ENTRY
和NUM-ENTRIES
是你的朋友。我建议将数据转换为比字符串更有用的格式 - 更准确地说是临时表。然后你可以用temp-table做任何你想做的事。首先逐行处理数据"或者更确切地说,通过条目进入"然后继续用它做任何你想做的事。
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.