String 如何根据openedge 4gl中的特定条件修剪字符串?
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开始的片段。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'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的合作,所以我认为我们没有任何有用的东西了。。。