Suche…


Bemerkungen

Beim Durchlaufen von internen Tabellen ist es im Allgemeinen vorzuziehen, einem ASSIGN , anstatt INTO einen Arbeitsbereich zu schleifen. Durch das Zuweisen von Feldsymbolen wird der Verweis auf die nächste Zeile der internen Tabelle bei jeder Iteration aktualisiert. Die Verwendung von INTO führt dazu, dass die Zeile der Tabelle in den Arbeitsbereich kopiert wird, was für lange / breite Tabellen teuer sein kann.

Interne Tabellenschleife

LOOP AT itab INTO wa.
ENDLOOP.

FIELD-SYMBOLS <fs> LIKE LINE OF itab.
LOOP AT itab ASSIGNING <fs>.
ENDLOOP.

LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
ENDLOOP.

LOOP AT itab REFERENCE INTO dref.
ENDLOOP.

LOOP AT itab TRANSPORTING NO FIELDS.
ENDLOOP.

Bedingtes Looping

Wenn nur Zeilen mit einer bestimmten Bedingung in die Schleife aufgenommen werden sollen, kann der Zusatz WHERE hinzugefügt werden.

LOOP AT itab INTO wa WHERE f1 = 'Max'.
ENDLOOP.

While-Schleife

ABAP bietet auch das herkömmliche WHILE -Loop an, das ausgeführt wird, bis der angegebene Ausdruck als falsch ausgewertet wird. Das Systemfeld sy-index wird für jeden Loop-Schritt erhöht.

WHILE condition.
* do something
ENDWHILE 

Machen Sie eine Schleife

Ohne Zusatz läuft der DO -Loop endlos oder zumindest solange, bis er explizit von innen heraus verlassen wird. Das Systemfeld sy-index wird für jeden Loop-Schritt erhöht.

DO.
* do something... get it?
* call EXIT somewhere
ENDDO.

Der Zusatz TIMES bietet eine sehr bequeme Möglichkeit, den Code zu wiederholen ( amount entspricht einem Wert vom Typ i ).

DO amount TIMES.
* do several times
ENDDO.

Allgemeine Befehle

Um die Schleifen zu brechen, kann der Befehl EXIT verwendet werden.

DO.
    READ TABLE itab INDEX sy-index INTO DATA(wa).
    IF sy-subrc <> 0.
        EXIT. "Stop this loop if no element was found
    ENDIF.    
    " some code
ENDDO.

Um zum nächsten Loop-Schritt zu CONTINUE kann der Befehl CONTINUE verwendet werden.

DO.
    IF sy-index MOD 1 = 0.
        CONTINUE. " continue to next even index
    ENDIF.
    " some code  
ENDDO.

Die CHECK Anweisung ist eine CONTINUE Bedingung. Wenn sich die Bedingung als falsch CONTINUE wird CONTINUE ausgeführt. Mit anderen Worten: Die Schleife führt den Schritt nur dann weiter, wenn die Bedingung erfüllt ist .

Dieses Beispiel von CHECK ...

DO.
    " some code
    CHECK sy-index < 10.        
    " some code
ENDDO.

... ist äquivalent zu ...

DO.
    " some code
    IF sy-index >= 10.
        CONTINUE.
    ENDIF.
    " some code
ENDDO.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow