繁体   English   中英

如何根据正在进行的特定标准修剪字符串opengge 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用单引号(或撇号,如果你愿意)分隔。

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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM