1. 程式人生 > >我們一起學ABAP(05)~流程控制

我們一起學ABAP(05)~流程控制

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.

我們一起學ABAP,希望我的一些知識和技巧,能給初學的同行帶來一些幫助。文章中有寫錯的文字或程式碼,煩請告之,會及時的更正。謝謝!