我们一起学ABAP(05)~流程控制

转载地址:http://blog.csdn.net/qq_37625033/article/details/68061827

1、ABAP-流程控制

SAP的数据流程控制中,有很多复杂的逻辑操作。因此也开发有相应的管理和组织项目的语法,如:ABAP的分支结构: if、case 。循环操作:do、while等。

1.1、IF 分支结构(选择结构)

用法当程序需要在一个二叉路口做出选择时,需要用IF语句,控制程序在某种情况下,执行某种选择。当第一个语句的结果不成立(为false)时,执行下一个语句。

 IF语句实现分支有三种类型:

a、若发生了某情况该怎么处理

IF  X = 5.

    WRITE:  /  'The value  of  X is 5'.

ENDIF.


b、若发生了某种情况,该怎么处理,否则有该怎么处理

IF X = 5.

    WRITE:  / 'The value of X is 5'.

ELSE.

    WRITE: / 'The value of X is 6'.

ENDIF.


c、若发生某种情况怎么处理,否则又该怎么处理,还可以怎么处理(嵌套N个选择条件)

IF X = 5.

    WRITE:  / 'The value of X is 5'.

ELSEIF X = 6.

     WRITE:  / 'The value of  X is  6'.

   ......

ELSE.

     WRITE:  / 'The value of X is 7 '.

ENDIF.


1.2、CASE 语句实现分支

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

DATA: NUM TYPE I.

......对NUM赋值

CASE NUM.

   WHEN 1.

       WRITE:  / 'The number is one'.

   WHEN 2.

       WRITE:  / 'The number is two'.

   ......

   WHEN OTHERS.                          

       WRITE:  / 'Others Number'.

ENDCASE.


注意:也许小伙伴们会有疑惑了,IF语句和CASE语句的功能类似啊,该怎么区分使用呢?

IF语句 最好使用 在3种以内的选择条件的程序中。超过3种 的选择条件,最好使用 CASE语句 更简洁高效。因为过多的使用IF嵌套语句,代码会显得十分臃肿,可读性差。


2、循环控制

2.1  DO语句无条件循环

语法: 

DO [<n> TIMES] [VARYING <f> FROM  <f1>] NEXT <f2>].

        <statement block>         "代码块

ENDDO.

注意可以使用TIMES选项限制循环次数。<n>可以是文字或变量。如果<n>是0或负数,系统不执行该循环。系统字段 SY-INDEX 中包含已处理过的循环次数

栗子: 

DO 15 TIMES.

       STR_A  =  SY-INDEX.

ENDDO.

栗子2:DO语句内部也可以实现多层嵌套循环,但是为了程序的可读性,建议最多不超过6层

DO 5 TIMES.

    WRITE:  / ' The index is ', SY-INDEX.

    DO 2 TIMES.

        WRITE: / 'The Next index is', SY-INDEX.

    ENDDO.

ENDDO.


2.2、WHILE语句条件循环

语法:

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

             <statement  block>

ENDWHILE.

注意使用WHILE语句时,要注意避免死循环。死循环就是循环条件一直成立(true),一直运行,不会自动停止。严重的会造成内存溢出,系统崩溃! 所以,在循环达到目的后,应该使WHILE语句的条件变为假(不成立 = false)的,或使用 EXIT、STOP、REJECT语句退出循环。


栗子:

WHILE  i < 10.

       i = i + 1.

       a = a + 10. 

ENDWHILE. 


2.3 LOOP ...ENDLOOP语句

用法:LOOP语句通常用来循环读取和操作内表。

LOOP  AT  <itab>.

    WRITE: itab.

ENDLOOP.


2.4 ON  CHANGE(循环内部数据管控)

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

栗子:

DO 5 TIMES.

    ON  CHANGE OF SY-INDEX.

       WRITE: / 'The index is',SY-INDEX.

    ENDON.

ENDDO.


2.6 循环终止语句

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

b、EXIT 语句 (用于结束当前整个循环

栗子:

DO 100 TIMES.

     IF   SY-INDEX  >=  10   AND   SY-INDEX  <=  20.

          CONTINUE.        "结束当前循环,进入循环下个语句,所以不会输出 10~20 间的数据

     ELSEIF SY-INDEX = 50.

          EXIT.                   "当前循环到第50次时,结束整个循环,输出的最大数据 49

    ENDIF.

ENDDO.


c、CHECK语句 

用法CHECK语句后面会跟一个表达式,表达式值为假(false)时,CHECK语句被激活,会退出循环(LOOP)或处理程序(statementblock).

1、当CHECK语句用在循环中时,被激活后会退出当前循环,进行下一次循环,类似于CONTINUE的作用;

2、当CHECK语句出现在循环之外,被激活后退出的是当前执行的 Processing Block(程序块),像方法、事件等代码块。

栗子:

DO 10 TIMES.

     CHECK SY-INDEX  <= 4.

      WRITE:  / SY-INDEX.

ENDDO.


3、比较运算符

表达中比较常用的比较运算符:




4、用循环控制语句,输出乘法口诀表

栗子:

DATA: X  TYPE  I,

           Y   TYPE  I,

            Z   TYPE I.

DATA:  XS(2)   TYPE  C,

            YS(2)   TYPE  C,  

            ZS(2)    TYPE  C.

X = 0.

Y = 0.


DO 9 TIMES .

    WRITE /  .

     X = X + 1.

     Y = 0.

     

      DO 9 TIMES.

          Y = Y + 1.

          Z = X * Y.

         

          XS = X. 

          YS = Y.

           ZS = Z.

           WRITE :  XS, 'X' , YS , ' = ' , ZS , ' , ' .

      ENDDO.

ENDDO.


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值