ABAP do 和 while 循环

举报
雨绸缪 发表于 2023/05/29 16:48:26 2023/05/29
【摘要】 DO 和 WHILE 语句用于在 ABAP 编程中创建循环。在 ABAP 程序中主要有四种类型的循环,它们是:带有 DO 语句的循环(主要用于无条件循环)。带 WHILE 语句的循环(主要用于条件循环)。用 LOOP 语句进行循环(在内表中循环)。用 SELECT 语句进行循环(循环浏览数据库数据)。 DO 循环DO 语句用于创建无条件的循环。DO [<n> TIMES] [VARYING ...

DOWHILE 语句用于在 ABAP 编程中创建循环。在 ABAP 程序中主要有四种类型的循环,它们是:

  • 带有 DO 语句的循环(主要用于无条件循环)。
  • WHILE 语句的循环(主要用于条件循环)。
  • LOOP 语句进行循环(在内表中循环)。
  • SELECT 语句进行循环(循环浏览数据库数据)。

loop-1.webp

DO 循环

DO 语句用于创建无条件的循环。

DO [<n> TIMES] [VARYING <f> FROM <f1> NEXT <f2>].
  [statement_block]
ENDDO
  • TIMES 条件用于指定循环迭代的次数。如果我们不指定这个条件,我们应该使用 EXITSTOP 这样的循环终止语句来避免无休止的循环。
  • 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.

运行结果:

图片.png

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 语句的循环将继续下去,只要条件变成假的,或者在块语句中触发了任何终止语句,如 EXITSTOP
  • VARY 条件与 DO 循环的 VARYING 条件相同,用于指定字段之间的距离。
  • WHILE 语句块应该总是以 ENDWHILE 语句结束。

log_exp 可以是任何逻辑表达式。在 WHILEENDWHILE 之间的语句块,只要条件为真,就会重复出现,或者直到出现终止语句,如 EXITSTOP。系统字段 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 提供三环控制语句,即 CONTINUECHECKEXIT

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.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。