【问题标题】:running a loop on a comma delimited list of items progress 4GL在逗号分隔的项目列表上运行循环 4GL
【发布时间】:2012-04-17 04:12:50
【问题描述】:
def var cList as char no-undo.
assign cList = "one,two,three,four".
<Loop> cList
logic...
</Loop>

在 char 变量中循环以逗号分隔的列表的最佳方法是什么,这样在这个例子中我会得到一个然后是两个然后是三个然后是四个。

【问题讨论】:

    标签: progress-4gl openedge


    【解决方案1】:

    大声笑我仍然记得我认为的一些进步。

    DEF VAR i AS INT NO-UNDO.
    &SCOPED-DEFINE LIST "one,two,three,four"
    
    DO i=1 TO NUM-ENTRIES({&LIST}):
      MESSAGE SUBSTITUTE("LIST[&1] is &2", i, ENTRY(i, {&LIST})).
    END.
    

    【讨论】:

      【解决方案2】:
      DEFINE VARIABLE ch-list     AS CHARACTER    NO-UNDO.
      DEFINE VARIABLE i-cnt       AS INTEGER      NO-UNDO.
      DEFINE VARIABLE i-entry     AS INTEGER      NO-UNDO.
      
      ASSIGN
          ch-list = "one,two,three,four"
          .
      
      ASSIGN
          i-cnt = NUM-ENTRIES(ch-list)
          .
      
      REPEAT i-entry = 1 TO i-cnt:
      
          DISPLAY
              ENTRY(i-entry, ch-list)
              WITH DOWN.
      
      END.
      

      【讨论】:

      • NUM-ENTRIES 函数没有内联在重复语句中是否有特定原因?与它有关的每次迭代都必须通过循环进行评估?
      • 是 - REPEAT ... TO 在循环的每次迭代中评估函数,因此为了获得更好的性能,请在循环外获取 num-entries 值,将其存储在变量中,然后使用变量.
      • 或做一个负循环(重复 i-entry = NUM​​-ENTRIES(ch-list) 到 1 by -1),因为每次迭代只重新评估第二个元素,但你通过列表​​工作向后。
      【解决方案3】:
       DEFINE VARIABLE iNumEntries AS INTEGER NO-UNDO.
      
       DEFINE VARIABLE iLoop AS INTEGER NO-UNDO.
      
       def var cList as char no-undo.
      
       assign cList = "one,two,three,four".
      
       ASSIGN iNumEntries = NUM-ENTRIES(cList,",").
      
       DO iLoop = 1 TO iNumEntries:
      
            MESSAGE ENTRY(iLoop,cList,",") VIEW-AS ALERT-BOX.
      
            /* You can use display, assign to variable, etc */
      
       END.
      

      【讨论】:

      • 你的回答只是一段代码,没有任何解释,因此有可能被删除。
      • 欢迎来到 Stack Overflow!虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 2021-02-09
      • 2014-05-31
      • 2021-12-31
      • 2012-03-07
      • 2022-01-13
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多