ABAP 指標常用語法
1
、定義指標 :
指標的定義主要有以下語句
定義任意型別的指標,但是不具備欄位結構(僅僅是一個地址)
FIELD-SYMBOLS <carrid> TYPE ANY.
參考資料庫表定義(這種指標是含有欄位結構的,參考內表同理)
FIELD-SYMBOLS <sflight> TYPE sflight.
FIELD-SYMBOLS <sflight> LIKE sflight.
FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.
動態定義具有欄位結構的指標型別
DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,
dref TYPE REF TO data.
FIELD-SYMBOLS: <itab> TYPE ANY TABLE.
CREATE DATA dref TYPE TABLE OF (tabname).
ASSIGN dref->* TO <itab>.
2 、指標的分配(常用句法)
分配某個變數給指標
ASSIGN var TO <field-symbols>
分配結構中的某個欄位的地址給指標
ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.
分配整個內錶行給指標(指標必須定義為有欄位結構的型別)
READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.
LOOP AT itab
ASSIGNING <field-symbols>.
ENDLOOP.
分配類的方法或介面給指標
ASSIGN dref->* TO <field-symbols>.
直接在SQL語句中分配
SELECT *
FROM (tabname) UP TO 20 ROWS
INTO TABLE <itab>.
主要應用在以下幾個方面:
1 給一個數據物件分配一個別名,把結構內多層指向的變成一個短長度的
例<fs>->f 代替 rec1->rec2-r>ec3-......->f
2 在執行時為一個變長度的字串設定長度和偏移
3 在確定執行時設定一個指向資料物件的指標
4 在執行時動態的採取和變更欄位的指標
5 可以訪問結構體的元件指向內錶行,不用一個單獨的工作區去處理內表
assign f to <fs>,把欄位f放到了<fs>領域中,這個領域<fs>在執行時指向欄位f的內容,
這意味著f的內容的所有改變在<fs中可見.宣告這個領域用:fileled-symbols:<fs>.
與其他語言不同:
1 在passcal語言用P^ ,在c中用*p,abap沒有像這樣的特徵
2 在passcal和c語言中定義一個指標指向另一個指標,使讓這個指標指向了兩一個指標的物件
而abap中讓這個領域指向兩一個領域,是這個領域指向了另一個領域的值。
例:
FIELD -SYMBOLS: <HSL> , <HSL2> .
LOOP AT IT_TABLE INTO STR_CLASS.
STR_ALV-RACCT = STR_CLASS-RACCT.
STR_ALV-TXT20_SKAT = STR_CLASS-TXT20.
ASSIGN STR_CLASS-HSL TO <HSL>.
DO 16 TIMES .
POS = SY-INDEX + 1 .
ASSIGN COMPONENT POS OF STRUCTURE <HSL> TO <HSL2>.
HSL = HSL + <HSL2>.
ENDDO .
IF STR_CLASS-DRCRK = 'S' .
STR_ALV-HSL_S = HSL.
ELSE .
STR_ALV-HSL_H = HSL.
ENDIF .
IF STR_CLASS-XBILK = 'X' .
ASSIGN COMPONENT 1 OF STRUCTURE <HSL> TO <HSL2>.
STR_ALV-HSLVT = <HSL2>.
STR_ALV-HSLMT = <HSL2> + STR_ALV-HSL_S - STR_ALV-HSL_H.
ENDIF .
COLLECT STR_ALV INTO IT_ALV.
CLEAR STR_ALV.
HSL = 0 .
ENDLOOP .