Zoeken…


Opmerkingen

Bij het doorlussen van interne tabellen heeft het in het algemeen de voorkeur om ASSIGN aan een ASSIGN in plaats van LUS INTO een werkgebied. Door veldsymbolen toe te wijzen, wordt hun referentie eenvoudig bijgewerkt om tijdens elke iteratie naar de volgende regel van de interne tabel te wijzen, terwijl het gebruik van INTO ertoe leidt dat de regel van de tabel naar het werkgebied wordt gekopieerd, wat duur kan zijn voor lange / brede tafels.

Interne tafellus

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.

Voorwaardelijke Looping

Als alleen lijnen die aan een bepaalde voorwaarde voldoen in de lus moeten worden opgenomen, kan toevoeging WHERE worden toegevoegd.

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

Herhalingslus

ABAP biedt ook de conventionele WHILE -Loop die loopt totdat de gegeven expressie als onwaar evalueert. De systeemveld sy-index wordt voor elke lusstap verhoogd.

WHILE condition.
* do something
ENDWHILE 

Doe Loop

Zonder enige toevoeging loopt de DO lus eindeloos of in ieder geval totdat deze expliciet van binnenuit wordt verlaten. De systeemveld sy-index wordt voor elke lusstap verhoogd.

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

De toevoeging TIMES biedt een zeer handige manier om code te herhalen ( amount vertegenwoordigt een waarde van type i ).

DO amount TIMES.
* do several times
ENDDO.

Algemene opdrachten

Om lussen te breken, kan het commando EXIT worden gebruikt.

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.

Om naar de volgende lusstap te gaan, kan de opdracht CONTINUE worden gebruikt.

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

De instructie CHECK is een CONTINUE met voorwaarde. Als de voorwaarde onjuist blijkt te zijn, wordt CONTINUE uitgevoerd. Met andere woorden: de lus gaat alleen door met de stap als de voorwaarde waar is .

Dit voorbeeld van CHECK ...

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

... is gelijk aan ...

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow