サーチ…


備考

内部テーブルをループするとき、することが一般的に好ましいASSIGNフィールドシンボルではなく、ループにINTOワークエリア。フィールドシンボルの割り当ては、各繰り返し中に内部参照テーブルの次の行を参照するように参照を更新しますが、 INTOを使用すると、テーブルの行が作業領域にコピーされます。

内部テーブルループ

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.

条件付きループ

特定の条件に一致する行のみをループに入れる必要がある場合は、 WHEREを追加することができます。

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

Whileループ

ABAPはまた、与えられた式が偽と評価されるまで実行される従来のWHILE -Loopを提供します。システムフィールドsy-indexはすべてのループステップで増加します。

WHILE condition.
* do something
ENDWHILE 

Do Loop

何も追加せずにDO -Loopは無限に実行されるか、少なくとも明示的に内部から出るまで実行されます。システムフィールドsy-indexはすべてのループステップで増加します。

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

TIMES追加はコードを繰り返す非常に便利な方法を提供します( amountはタイプi値を表します)。

DO amount TIMES.
* do several times
ENDDO.

一般的なコマンド

ループを解除するには、 EXITコマンドを使用します。

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.

次のループステップにスキップするには、 CONTINUEコマンドを使用します。

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

CHECKステートメントは、条件付きのCONTINUEです。条件がfalseの場合、 CONTINUEが実行されます。言い換えれば、ループは、条件が真であればステップを実行するだけです

このCHECK例...

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

...と同等です...

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow