和大部分语言一样,ABAP也有WHILE循环和DO循环,也都有循环的嵌套和终止。
一、WHILE循环
ABAP的WHILE循环的结束是通过条件判断进行控制的。
WHILE 条件.
循环体.
ENDWHILE.
举个例子,条件是cnt<20,中间为了输出格式美观增加了条件控制。
*WHILE循环 通过条件控制次数,注意死循环*
DATA cnt TYPE I.
WRITE 'This is WHILE loop'.
WHILE cnt < 20.
IF cnt = 10 OR cnt = 0.
SKIP.
ENDIF.
WRITE cnt.
cnt = cnt + 1.
ENDWHILE.
此段代码输出结果显示:
二、DO循环
ABAP的DO循环可以直接控制循环次数,而不需要条件判断。
DO n TIMES."n为循环的次数
循环体
ENDDO.
举个例子,循环次数是10次,中间为了输出格式美观增加了条件控制。
*DO循环 直接限制次数,不需要通过条件控制*
DATA cnt TYPE i.
WRITE 'This is DO loop'.
DO 10 TIMES.
IF cnt = 5 or cnt = 0.
SKIP.
ENDIF.
WRITE cnt.
cnt = cnt + 1.
ENDDO.
此段代码输出结果显示:
三、循环的嵌套
这里仅举例WHILE循环嵌套WHILE循环,DO循环嵌套DO循环,两者结合直接将外循环的循环体复制过去就行。
1、WHILE循环嵌套
这里的输出字符串中有',需要转义的时候转义字符也是'。
DATA outer TYPE I VALUE 5.
DATA inner TYPE I VALUE 3.
WRITE 'This is WHILE loop'.ULINE.
WHILE outer > 0.
WRITE :'This is floor',outer,'and it''s inner'."句子中有'转义字符也为'
WHILE inner > 0.
WRITE inner.
inner = inner - 1.
ENDWHILE.
inner = 3.
ULINE.
outer = outer - 1.
ENDWHILE.
此段代码输出结果显示:
二、DO循环嵌套
DATA outer TYPE i VALUE 5.
DATA inner TYPE i VALUE 3.
WRITE 'This is DO loop'.ULINE.
DO 5 TIMES.
WRITE :'This is floor',outer,'and it''s inner'.
DO 3 TIMES.
WRITE inner.
inner = inner - 1.
ENDDO.
outer = outer - 1.
inner = 3.
ULINE.
ENDDO.
此段代码输出结果显示:
这里两端代码都比较好理解,就不做过多解释。
四、跳出循环
代码中使用的系统变量SY-INDEX表示当前循环的次数。
1、CONTINUE,使用CONTINUE时,满足条件的时候只会结束本次循环,后面的语句不会执行,但是整个循环不会结束。
DO 10 TIMES.
IF sy-index = 5.
CONTINUE."满足条件的时候,结束本次循环并且继续下一次循环,后面的语句不会执行
ENDIF.
WRITE : / 'This is',sy-index,'time'.
ENDDO.
此段代码输出结果显示:
2、EXIT,使用EXIT时,满足条件的时候就会结束整个循环并且后面的语句不会执行。
DO 10 TIMES.
IF sy-index = 6.
EXIT."后面的语句不会执行,并且直接结束整个循环
ENDIF.
WRITE : / 'This is',sy-index,'time'.
ENDDO.
此段代码输出结果显示:
3、CHECK,使用CHECK时进行条件判断,符合条件的才会继续执行后面语句,不满足的不执行,不会结束整个循环,可以用IF条件判断进行改写。 CHECK可在循环之外的地方使用。
DO 10 TIMES.
CHECK sy-index = 7."满足CHECK的条件才会执行后面的语句,有条件的执行后面的语句,可用IF改写
"IF sy-index = 7.
" WRITE : / 'This is',sy-index,'time'.
"ENDIF.
WRITE : / 'This is',sy-index,'time'.
ENDDO.
此段代码输出结果显示: