我們一起學ABAP (02)~基礎語法與資料型別,輸出到螢幕
1、ABAP(ABAP/4)的基本語法
基本資料型別及屬性:
DECIMALS 可以在資料型別後製定小數位的個數。
1.1、規則和幾點建議:
a. 我們常犯的低階錯誤~ 語法切換(中英)時,忽略了符號的差異,計算機會把不同的符號解釋成不同的意義!
b. 不要用詞典的釋義來理解你在程式設計中遇到的單詞,兩者之間是有很多差異的,不建議這樣的學習方法,是彎路! c. ABAP中是用 句號 "." 來表示一個語句的結束符號.
d. ABAP 中用 雙引號( " )作為單行註釋符號(有些書上又稱它 “右註釋符號”), 用 星號(*) 做為多行註釋符號,
字串修飾符號,單引號( ' ' ).
2、變數的宣告:
關鍵字”DATA“, 要注意的是,宣告多個變數時,DATA關鍵字後面必須加上冒號”:“,否則會出現語法錯誤。變數名最長30個字元,不能含有 "+" 、"-"、 "*" 、"/" 、"()"等字元。
語法:
DATA <變數名>(長度) TYPE <資料型別> VALUE<預設值>
示例:(注意長度和預設值都可以不寫,則系統會自行給個”預設值“。下面的幾種宣告都是語法正確的。)
DATA: test(10) TYPE C VALUE 'Hello SAP',
test1(10) TYPE I ,
test2 TYPE P,
test TYPE I VALUE '10'.
如果你自己寫預設值了,那麼這個值就必須與前面宣告的型別一致,長度也最好一致,否則會”擷取“宣告時的長度來處理執行結果。
2.1、系統保留字 ( 就是:系統自已 專用的名詞。)
2.2、 以參考的形式定義變數 , 關鍵字 "LIKE"
語法:(同樣的,單個不用加冒號,多個(大於1)必須加冒號”:“)
DATA <變數1> LIKE <變數2>
2.3、變數的初始化 關鍵字 "CLEAR"
語法:(同樣的,單個不用加冒號,多個(大於1)必須加冒號”:“)
CLEAR <變數名>
3、常量
常量:一旦被定義就會長期儲存,並且其值不可改變(修改)的變數。
關鍵字 "CONSTANS" (和定義變數唯一的區別是用的關鍵字不同,語法雷同.)
語法:(單個不加冒號,多個(大於1)必須加冒號”:“)
CONSTANTS <變數名>(長度) TYPE <資料型別> VALUE(預設值)
例子:decimals 用於指定小數位,前面有講。
CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'.
4、STATICS 定義
我對這個關鍵字的理解是,定義一個臨時的變數,當它所在的程式結束後,它就會被釋放(清除)。
語法:(單不加,否則必須加冒號)
STATICS <變數名>(長度) <資料型別> <預設值> <decimals這個隨意,有木有都可以>
5、自定義變數型別
關鍵字 "TYPES"
語法: 單不加,否則必須加冒號
TYPES <變數名> (長度) <資料型別> <可有可無的decimals>
栗子:(單不加,否則必須加冒號)
TYPES: NAME(10) TYPE C,
NUMBER TYPE I.
DATA: PLAUER TYPE NAME VALUE 'JERY TANG', "定義型別為NAME(ABAP中註釋符號為英文中的雙引號'" ')
NICKNAME LIKE PLAUER.
6、結構體的定義
結構體:也是一種資料型別,但不屬於基本的資料型別。是一種臨時建立的,有多個變數組成的臨時物件。
關鍵字: DATA Begin of ... End of
語法:
DATA: BEGIN OF <結構體名字>
<欄位1>
<欄位2>
......
END OF<結構體名字>.
栗子:
DATA: BEGIN OF ADDRESS,
NAME(10) TYPE C,
NUMBER TYE P,
END OF ADDRESS.
注意; 定義好後,就可以這樣使用了,如: ADDRESS-NAME. (可以把這個看作一個定義好的變數)
6.1、結構體的賦值
a、ABAP中可以使用 "WRITE"語句來輸出結果。
b、ABAP中可以對定義了具體欄位名字的結構體直接賦值。
c、相同的結構可以直接用 等號 "="來數顯資料的相互複製。
d 、相同結構體可以使用 "MOVE ......TO...."語句進行賦值,不同結構體可以使用 ”MOVE-CORRESSPONDING"將兩個結構體之間相同的欄位自動匹配並賦值。
舉個栗子:
USERINF-SID = 'A00001'.
USERINF-NAME = 'JERY'.
USERINF-TEL = '010-12345678'.
USER2
= USERINF.
WRITE: USER2, USERINF-SID.
"輸出結果為: A00001 JERY 010-123456 A00001
栗子:
DATA: BEGIN OF USERDETALL,
SID(10) TYPE C, "編號
NAME(20) TYPE C, "姓名
BIRDATE TYPE D, "出生日期
ADD(50) TYPE C, "地址
END OF USERDETALL.
MOVE-CORRESSPONDING USERINF TO USERDETALL.
注意:相同欄位之間進行數值傳遞(相互賦值),其他的不同型別欄位的值將為空!
結構體的另外一種賦值方式:繼承式賦值(學到繼承再一起學習哈~)
7、WRITE語句的使用(在螢幕中定位輸出)
語法:("/" 這個斜槓在ABAP中用作換行符號)
WRITE AT [/] <位置> (長度) <變數名>
位置:最長為三位數字的變數或者數字,表示在螢幕上 的位置。 另外,如果格式規範只包含直接量(PS:不是變數的值都是直接量),可以忽略關鍵字 AT。
栗子:
REPORT Z7003.
WRITE : ' First line' .
WRITE : / 10 'First line',
24 'Test write' .
WRITE : / (5) 'First line',
24 ' Test write' .
結果樣式如下:
7.1、WRITE語句格式化輸出
格式化選項 用途
7.2、日期欄位的格式化
選項 用途
7.3 、符號和圖示的輸出
語法:(當然關鍵字必須和名字的值型別一樣,不然無法識別 ,報錯。)
WRITE <符號的名字> AS SYMBOL.
WRITE <圖示的名字> ASICON.
栗子:
INCLUDE <SYMBOL>.
INCLUDE <ICON>.
WRITE: / 'Phone Symbol:' , SYM_PHONE AS SYMOL.
SKIP.
WRITE: / 'Alarm lcon: ' , ICON_ALARM AS ICON.
輸出的結果和樣式:
7.4、輸出螢幕上的線和空行
a、水平線
語法:
ULINE AT [/] <起始位置> (長度)
等同於另一種寫法:
WRITE AT [/] <起始位置>(長度)SY-ULINE.
b、垂直線
語法:
WRITEAT [/] <起始位置> SY-VLINE.
等同於:
WRITE AT [/] <起始位置> ' | '.
c、空行
語法:
SKIP [行數].
等同於:
SKIP TOLINE<n>.
d、輸出複選框
語法:
WRITE <F> AS CHECKBOX.
栗子:
DATA: FLAG1 VALUE ' ' ,
FLAG2 VALUE 'X' ,
FLAG3(5) VALUE 'Xenon'.
WRITE: / 'Flag 1' ,FLAG1 AS CHECKBOX,
/ 'Flag 2' , FLAG2 AS CHECKBOX,
/ 'Flag 3' , FLAG3 AS CHECKBOX.
輸出效果:
7.5、顏色輸出
語法:
FORMAT [COLOR {{{color (ON)} | OFF}|{ = col}}] "使用顏色
[INTENSIFIED[{ON|OFF}|{= flag}]] “背景顏色
[INVERSE [{ON|OFF} | { =flag }]] "字型顏色
栗子:
DATA col TYPE I VALUE 0.
DO 8 TIMES.
col = sy-index - 1.
FORMAT COLOR = col.
WRITE: / col COLOR OFF,
'INTENSIFIED ON' INTENSIFIED ON,
'INTENSIFIED OFF' INTENSIFIED OFF,
'INVERSE ON' INVERSE ON.
ENDDO.
輸出結果和樣式效果:
我們一起學ABAP,歡迎小夥伴們和我一起學習,若發現文章中有寫錯的,或理解錯的,還望不吝指教,十分感謝!