如何根据正在进行的特定标准修剪字符串opengge 4gl?

时间:2016-04-04 07:00:34

标签: string trim progress-4gl openedge

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'

1 个答案:

答案 0 :(得分:3)

基于此问题以及您与EDIFACT合作的其他问题。

EDIFACT以单引号'分隔。 (如果你愿意的话,还是撇号)。

ENTRYNUM-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.