2012-04-03 44 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

相關問題