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.