수색…


소개

진행 ABL에서 반복 (반복)하는 몇 가지 방법이 있습니다.

계속 사용하십시오.

DO WHILE 루프는 WHILE -part가 충족되지 않으면 루프를 계속합니다. 이렇게하면 영원히 돌아가고 하나의 CPU 코어에서 모든 시간을 쉽게 먹을 수 있습니다.

WHILE 식 사용 :

종료.

expression 은 부울 논리, 비교, 변수, 필드 등의 조합으로 실제 값으로 평가됩니다.

/* This is a well defined DO WHILE loop that will run as long as i is lower than 10*/
DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DO WHILE i < 10:
    i = i + 1.
END.

DISPLAY i. // Will display 10

WHILE -part에서 원하는 수의 수표를 사용할 수 있습니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DO WHILE TODAY = DATE("2017-02-06") AND RANDOM(1,100) < 99:
    i = i + 1.
END.

MESSAGE i "iterations done" VIEW-AS ALERT-BOX.

그러나 컴파일러는 WHILE -part가 결국 충족되는지 확인하는 데 도움이되지 않습니다.

/* Oops. Didnt increase i. This will run forever... */
DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DO WHILE i < 10:
    i = 1.
END.

DO var = 끝내기 시작 [BY step]

이 반복은 값을 시작점에서 끝점으로 변경하며, 선택적으로 각 단계에 대해 지정된 값을 사용하여 값을 변경합니다. 기본 변경은 1입니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

DO i = 10 TO 15:
    DISPLAY i WITH FRAME x1 6 DOWN .
    DOWN WITH FRAME x1.
END.

결과:

---------------i

        10
        11
        12
        13
        14
        15

날짜를 반복 할 수도 있습니다.

DEFINE VARIABLE dat AS INTEGER        NO-UNDO.

DO dat = TODAY TO TODAY + 3:

END.

그리고 소수 이상. 그렇다면 BY 를 사용하고 싶을 것입니다. 그렇지 않으면 INTEGER 는 똑같이 잘했을 것입니다 ...

DEFINE VARIABLE de AS DECIMAL     NO-UNDO.

DO de = 1.8 TO 2.6 BY 0.2:
    DISPLAY "Value" de.
END.

BY 음수를 사용하면 더 높은 값에서 낮은 값으로 이동할 수 있습니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

DO i = 5 TO 1 BY -1:
    
END.

표현은 더 이상 만날 때까지 테스트 될 것입니다. 이렇게하면 루프가 완료되면 카운터가 높아지거나 (위쪽으로 움직이는 경우) 또는 아래쪽으로 움직이는 경우 (카운터가 아래쪽으로 움직이는 경우) 낮아집니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO.

DO i = 5 TO 1 BY -1:
    
END.

MESSAGE i. // Will message 0

다른 예시:

DEFINE VARIABLE da AS DATE     NO-UNDO.

DISPLAY TODAY. //17/02/06
DO da = TODAY TO TODAY + 10:
    
END.
DISPLAY da. //17/02/17 (TODAY + 11)

반복

REPEAT는 루프를 명시 적으로 종료하지 않는 한 영구히 반복됩니다.

//Runs forever
REPEAT:
    // Do stuff
END.

루프를 종료하려면 LEAVE 키워드를 사용할 수 있습니다. 레이블이 있거나 없거나. 레이블이 없으면 LEAVE 는 항상 현재 루프에 영향을 미칩니다. 이름을 사용하여 LEAVE 할 루프를 지정할 수 있습니다.

/* Without a label */
REPEAT:
  //Do stuff
  IF TRUE THEN LEAVE.
END.

/* With a label */
loopLabel:
REPEAT:
  //Do stuff
  IF <somecondition> THEN LEAVE loopLabel.
END.

/* Two nested REPEATS */
DEFINE VARIABLE i AS INTEGER     NO-UNDO.
loopLabelOne:
REPEAT:
    loopLabelTwo:
    REPEAT:
        i = i + 1.
        IF RANDOM(1,100) = 1  THEN LEAVE loopLabelTwo.
        IF RANDOM(1,100) = 1  THEN LEAVE loopLabelOne.
    END.
    IF RANDOM(1,100) = 1  THEN LEAVE loopLabelOne.
END.
DISPLAY i.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow