ABAP do 和 while 循环
DO
和 WHILE
语句用于在 ABAP 编程中创建循环。在 ABAP 程序中主要有四种类型的循环,它们是:
- 带有
DO
语句的循环(主要用于无条件循环)。 - 带
WHILE
语句的循环(主要用于条件循环)。 - 用
LOOP
语句进行循环(在内表中循环)。 - 用
SELECT
语句进行循环(循环浏览数据库数据)。
DO 循环
DO 语句用于创建无条件的循环。
DO [<n> TIMES] [VARYING <f> FROM <f1> NEXT <f2>].
[statement_block]
ENDDO
TIMES
条件用于指定循环迭代的次数。如果我们不指定这个条件,我们应该使用EXIT
或STOP
这样的循环终止语句来避免无休止的循环。VARYING
条件用于指定迭代的字段之间的距离。DO
语句块应始终以ENDDO
语句结束。
例如计算从 1 加到 100 的和:
DATA: count TYPE i,
sum TYPE i.
DO 100 TIMES.
count = count + 1.
sum = sum + count.
ENDDO.
WRITE: / , '1+2+3+...+100=', sum.
运行结果:
PARAMETERS:
p_invest TYPE p DECIMALS 2,
p_profit TYPE p DECIMALS 2.
DO.
p_invest = p_invest * '1.05'.
IF p_invest >= p_profit.
WRITE: / 'You need ', sy-index, ' years to achieve this profit.'.
EXIT.
ENDIF.
ENDDO.
WHILE
循环
WHILE
语句用于创建条件性循环。只要指定的条件为 TRUE
,循环就会继续进行。当条件变为 FALSE
时,循环将被终止。
语法:
WHILE <condition> [VARY <f> FROM <f1> NEXT <f 2>].
[statemaent_block]
ENDWHILE.
- 带
WHILE
语句的循环将继续下去,只要条件变成假的,或者在块语句中触发了任何终止语句,如EXIT
或STOP
。 VARY
条件与DO
循环的VARYING
条件相同,用于指定字段之间的距离。WHILE
语句块应该总是以ENDWHILE
语句结束。
log_exp
可以是任何逻辑表达式。在 WHILE
和 ENDWHILE
之间的语句块,只要条件为真,就会重复出现,或者直到出现终止语句,如 EXIT
或 STOP
。系统字段 sy-index
包含了循环的次数,包括当前的循环次数。
REPORT demo_flow_control_while.
DATA: length TYPE i VALUE 0,
strl TYPE i VALUE 0,
string(30) TYPE c VALUE 'Test String'.
strl = strlen( string ).
WHILE string NE space.
WRITE string(1).
length = sy-index.
SHIFT string.
ENDWHILE.
WRITE: / 'STRLEN: ', strl.
WRITE: / 'Length of string:', length.
这里,一个 WHILE
循环被用来确定一个字符串的长度。这是通过每次循环处理时将字符串向左移动一个位置来完成的,直到它只包含空白。我们选择这个例子来演示 WHILE
语句。当然,你可以使用 strlen
函数更容易和有效地确定字符串的长度。
REPORT zloop_test_while_01.
PARAMETERS:
p_invest TYPE p DECIMALS 2,
p_profit TYPE p DECIMALS 2.
DATA:
l_years TYPE i VALUE 0.
WHILE p_invest < p_profit.
p_invest = p_invest * '1.05'.
l_years = l_years + 1.
ENDWHILE.
WRITE: / 'You need ', l_years,
' years to achieve this profit.'.
WHILE sy-index <= 10.
WRITE: / 'Hello for the ', sy-index, '''th time.'.
ENDWHILE.
终止循环
ABAP 提供三环控制语句,即 CONTINUE
、CHECK
、EXIT
。
CONTINUE
语句
CONTINUE
:该语句将无条件地通过当前循环。 它需要 IF
语句来应用条件。 一旦编译器读取此语句,它就会跳过当前循环并进入下一次迭代。
Report Z_CONTINUE_TEST.
DO 5 TIMES.
IF SY-INDEX = 3.
CONTINUE.
ENDIF.
Write / SY-INDEX.
ENDDO.
输出:
1
2
4
5
CHECK
语句
CHECK
:在循环语句块中使用 CHECK
条件语句可以有条件地终止单个循环。 如果 CHECK
条件为真,则执行其余语句; 否则,它会跳过当前循环并进入下一次迭代。
如果条件不成立,在 CHECK
语句之后的当前语句块中剩余的语句将被忽略,并开始下一次循环。条件可以是任何逻辑表达式。
DO 4 TIMES.
CHECK sy-index BETWEEN 2 and 3.
WRITE sy-index.
ENDDO.
EXIT
语句
EXIT
:要立即无条件地终止整个循环,请在循环的语句块中使用 EXIT
语句。该语句将在编译器读取后立即结束所有迭代。 它还需要 IF
语句来应用条件。 在 EXIT
语句之后,程序控制转到 LOOP
语句之后的语句。
DO 4 TIMES.
IF sy-index = 3.
EXIT.
ENDIF.
WRITE sy-index.
ENDDO.
- 点赞
- 收藏
- 关注作者
评论(0)