![](/img/trans.png)
[英]How to find the index of the string separated by delimeters in progress openedge 4gl?
[英]How to trim a string based on specific criteria in progress 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开始的段。 结果字符串应为ABC + 123:xy + 123 ++ 23'LMV ++ 123:xy'
根据这个问题以及您与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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.