Sök…


Anmärkningar

När man slingar över interna tabeller är det i allmänhet att föredra att ASSIGN en ASSIGN snarare än slinga INTO ett arbetsområde. Tilldelning av fältsymboler uppdaterar helt enkelt sin referens till att peka på nästa rad i den interna tabellen under varje iteration, medan användning av INTO resulterar i att linjen i tabellen kopieras till arbetsområdet, vilket kan vara dyrt för långa / breda tabeller.

Internt tabellögla

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.

Villkorlig looping

Om endast rader som matchar ett visst villkor ska tas in i slingan kan tillägg WHERE läggas till.

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

Medan Loop

ABAP erbjuder också den konventionella WHILE -Loop som körs tills det givna uttrycket utvärderas till falskt. sy-index kommer att ökas för varje slingsteg.

WHILE condition.
* do something
ENDWHILE 

Gör slingan

Utan något tillägg kör DO -Loop oändliga eller åtminstone tills det uttryckligen lämnas inifrån. sy-index kommer att ökas för varje slingsteg.

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

TIMES tillägget erbjuder ett mycket bekvämt sätt att upprepa kod ( amount representerar ett värde av typ i ).

DO amount TIMES.
* do several times
ENDDO.

Allmänna kommandon

För att bryta slingor kan kommandot EXIT användas.

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.

För att hoppa till nästa CONTINUE kan kommandot CONTINUE användas.

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

CHECK uttalandet är en CONTINUE med villkor. Om villkoret visar sig vara falskt kommer CONTINUE att CONTINUE . Med andra ord: loopen fortsätter bara med steget om villkoret är sant .

Detta exempel på CHECK ...

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

... är ekvivalent med ...

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow