2012-04-03 82 views
4
def var cList as char no-undo. 
assign cList = "one,two,three,four". 
<Loop> cList 
logic... 
</Loop> 

通过一个char变量逗号分隔的列表什么是最好的方式来循环,使得在这个例子中,我会得到一个那么双然后是三个然后是四个。运行一个逗号分隔的项目列表上的循环前进4GL

回答

2

大声笑我还记得有点进步,我想。

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. 
3
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. 
+0

是否有一个具体的原因,'NUM-ENTRIES'功能在内衬中重复的语句?与它有什么关系,必须通过循环对每次迭代进行评估? – 2015-09-23 15:07:04

+1

是 - REPEAT ...在循环的每次迭代中评估函数,因此为了获得更好的性能,请将循环外的num-entries值存储在变量中,然后使用该变量。 – 2015-09-23 19:41:08

+0

或者做一个负循环(重复i-entry = NUM​​-ENTRIES(ch-list)为-1 by -1),因为在每次迭代中只有第二个元素被重新评估,但是通过列表反向工作。 – AquaAlex 2016-02-11 14:43:51

-1
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. 
+0

你的答案只是一段代码,没有任何解释,因此,它很可能被删除。 – 2015-08-28 08:17:00

+1

欢迎来到堆栈溢出!虽然这段代码可能会回答这个问题,但为什么和/或代码如何回答这个问题提供了额外的背景,这提高了它的长期价值。 – NathanOliver 2015-08-28 14:51:35