String 如何根据openedge 4gl中的特定条件修剪字符串?

String 如何根据openedge 4gl中的特定条件修剪字符串?,string,trim,progress-4gl,openedge,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' ED

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'

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,以某种方式能够提取每个元素所说的内容,仍然在努力获取我需要的准确信息,这个问题是在解析之前过滤段标记。谢谢。顺便说一句,如果你以前在edifact工作过,并且有一些工作库,你能帮我吗,thanks@mac100大约10年前,我们停止了与EDIFACT的合作,所以我认为我们没有任何有用的东西了。。。