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