数据流控制

1. 使用IF 语句实现分支,IF语句实现分支有3种类型

1.1 若发生了某事该怎样处理.

DATATYPE VALUE 6.

IF 5.
  WRITE:'The value of x is 5'."輸出:The value of x is 5
ENDIF.

1.2 若發生了某事則怎麼辦,否則該如何處理。

DATATYPE VALUE 6.
IF 5.
  WRITE:'The value of x is 5'.
ELSE.
  WRITE:'The value of x is 6'."輸出:The value of x is 6
ENDIF.

1.3 嵌套使用 IF...ELSE进行多个条件判断。

      IF <condition1>.
          <statement block>.
      ELSEIF <condition2>.
          <statement block>.
      ELSE.
          <statement block>
      ENDIF.

DATATYPE VALUE 7.
IF 5.
  WRITE:'The value of x is 5'.
ELSEIF 6.
  WRITE:'The value of x is 6'.
ELSE.
  WRITE:'The value of x is 7'."輸出:The value of x is 7
ENDIF.

 2.例用CASE...WHEN...ENDCASE语句实现分支。

    当程序面临多个交叉条件时,就可以使用CASE 语句进行分去。

       CASE <f>.
        WHEN <f1>.
           <statement block>.
        WHEN <f2>.
           <statement block>.
        WHEN ...
        WHEN OTHERS.
           <statement block>.
       ENDCASE.


DATA:TYPE VALUE 8.
CASE X.
  WHEN 1.
    WRITE:'The NO.ONE'.
  WHEN 2.
    WRITE:'The NO.TWO'.
  WHEN OTHERS.
    WRITE:'Others NO.'."输出:Others NO.
ENDCASE.

 3. 使用LOOP...ENDLOOP语句实现循环控制

    LOOP语句通常用于实现内表数据的循环读取及操作.

LOOP AT ITAB.
WRITE:ITAB.
ENDLOOP.

 4. 使用DO语句实现内部循环次数控制

 4.1 DO语句可以指定循环资数.

DO TIMES.
WRITE:'THE index is',SY-INDEX.
ENDDO.

 

 4.2 DO语句内部还可以实现多层嵌套,为了保证程序可读性,建议嵌套最多不可超过6层。

     DO.
       [<n> TIMES]
       [VARYING <f> FROM <f1> NEXT <f2>].
       <statement block>
     ENDDO.
     n:可以是数字或者变量,如果n是0或者负数,系统不执行该循环.  TIMES:循环次数。
     VARYING:选项在每次循环中给变量<f>重新赋值。
     使用DO语句时要避免死循环,如果不使用TIMES选项,则在语句块中至少包含一个EXIT、STOP、REJECT语句,以使系统能退出循环。

DO TIMES.
WRITE:'The index is',SY-INDEX.
DO TIMES.
WRITE:'The Next index is',SY-INDEX.
ENDDO.
ENDDO.

 

 5. 使用ONCHANGE 实现循环内部数据管控

   当循环中的数据值发生变动时,可以用表达式ONCHANGE来触发数值变动事件。

DO TIMES.
ON CHANGE OF SY-INDEX.
WRITE:'The index is',SY-INDEX.
ENDON.
ENDDO.

 


DATA WHILE_INDEX TYPE VALUE 0.
WHILE WHILE_INDEX < 5.
  WHILE_INDEX WHILE_INDEX + 1.
  DO TIMES.
    ON CHANGE OF WHILE_INDEX.
      WRITE:'The while_index has change value is',WHILE_INDEX.
    ENDON.
    WRITE:'SY-INDEX=',SY-INDEX.
  ENDDO.
ENDWHILE.

 

6.循环的中止

6.1 CONTINUE语句用于结束当前循环进行下一步循环。

6.2 EXIT语句用于结束当前整个循环。

DO 100 TIMES.
IF SY-INDEX 10 AND SY-INDEX <= 20.
  CONTINUE.
ELSEIF SY-INDEX 50.
  EXIT.
ELSE.
  WRITESY-INDEX.
ENDIF.
ENDDO.

 7. 使用WHILE 条件循环

       WHILE <condition> [VARY <f> FROM <f1> NEXT <f2>].
         <statement block>
      ENDWHILE.

DATA WHILE_INDEX TYPE VALUE 0.
WHILE WHILE_INDEX < 5.
  WHILE_INDEX WHILE_INDEX + 1.
  IF WHILE_INDEX 3.
    CONTINUE.
  ENDIF.
  WRITE:'while_index',WHILE_INDEX.
ENDWHILE.

 

 有条件终止循环(CHECK):

DATA while_index TYPE VALUE 0.
WHILE while_index < 5.
  while_index while_index + 1.
  CHECK while_index BETWEEN AND 5.
  WRITE:'The while_index is',while_index.
ENDWHILE.

 

 完全终止循环(EXIT):

DATA WHILE_INDEX TYPE VALUE 0.
WHILE WHILE_INDEX < 5.
  WHILE_INDEX WHILE_INDEX + 1.
  IF WHILE_INDEX 3.
    EXIT.
  ENDIF.
  WRITE:'The while_index is',while_index.
ENDWHILE.

原文地址:https://www.cnblogs.com/sanlly/p/3230570.html