ABAP中的字串操作
阿新 • • 發佈:2019-02-15
1,連線字串:將幾個字串連線起來,形成一個新的字串,可以使用CONCATENATE語句,SEPARATED BY用於指定一個字元(串)作為分隔符,在構成新字串時插入s1...sn之間。
REPORT z_string_con.
DATA: s1(9) TYPE c VALUE 'FName',
s2(10) TYPE c VALUE 'SName',
s3(20),
sep(1) TYPE c VALUE '.'.
CONCATENATE s1 s2 INTO s3.
WRITE / s3.
CONCATENATE s1 s2 INTO s3 SEPARATED BY sep.
WRITE / s3.
輸出結果如下:
FNameSName
FName.SName
注意所有字串操作將忽略s1...sn中的尾部空格
2,拆分字串:使用SPLIT語句將字串拆分成多個小串。
語法:SPLIT s_source AT sep INTO s1 ... sn.
REPORT z_string_split.
DATA: text TYPE string,
itab TYPE TABLE OF string.
text = 'YOU ARE GOOD BOY'.
SPLIT text AT space INTO TABLE itab.
LOOP AT itab INTO text.
WRITE / text.
ENDLOOP.
space其實就是text字字串中的空格,語句LOOP AT用於迴圈出內表的每一行資料
輸出結果:
YOU
ARE
GOOD
3,查詢子串模式:在一個字串中找到一個子字串,使用SEARCH語句。找到則將SY-SUBRC返回0否則返回4,SY-FDPOS返回在該字串的位置
語法:SEARCH c FOR str.
模式:
str 搜尋str並忽略尾部空格。
.str. 搜尋str,但忽略尾部空格。
*str 搜尋以str結尾的單詞。
str* 搜尋以str開頭的單詞。
簡單例項:
REPORT z_string_search.
DATA: string(30) TYPE c VALUE 'This is a testing sentence.'.
WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
SEARCH string FOR 'x'.
WRITE: / 'x', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR 'itt '.
WRITE: / 'itt ', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR '.e.'.
WRITE: / '.e.', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR '*e'.
WRITE: / '*e', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR 's*'.
WRITE: / 's*', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
輸出結果:
Searched SY-SUBRC SY-FDPO
x 4 0
itt 4 0
.e. 4 0
*e 0 18
s* 0 18
4,替換欄位內容:用其他字串替換欄位的某些部分,使用REPLACE語句。
語法:REPLACE str1 WITH str2 INTO s_dest [LENGTH len].
對欄位s_dest進行搜尋,如果出現str1,則用str2替換第一次出現的部分。len指定搜尋長度,替換成功了SY-SUBRC返回0,非則未進行任何替換。
簡單例項:
REPORT z_replace.
DATA: name TYPE string.
name = 'Michael-Cheong'.
WHILE sy-subrc = 0.
REPLACE '-' WITH ' ' INTO name.
ENDWHILE.
WRITE / name.
輸出結果:Michael Cheong
5,確定字串長度:從首字元到最後一個非空字元的長度,即不幫擴結尾空格,使用STRLEN。
語法:[COMPUTE] n = STRLEN( str ).
簡單例項:
REPORT z_strlen.
DATA: text(24) TYPE c VALUE 'ABAP Language',
len TYPE i.
len = strlen( text ).
WRITE: / 'Length of', text, 'is', len.
輸出結果:Length of ABAP Language is 13
6,其他操作語句:
SHIFT 截斷字串
CONDENSE 刪除多餘空格
TRANSLATE 字元轉換
CONVERT TEXT 建立可排序的格式
OVERLAY 字元覆蓋
語法:CONCATENATE s1 ... sn INTO s_dest [SEPARATED BY sep].
其中s_dest也可以是s1...sn中的某個變數。
簡單例項:REPORT z_string_con.
DATA: s1(9) TYPE c VALUE 'FName',
s2(10) TYPE c VALUE 'SName',
s3(20),
sep(1) TYPE c VALUE '.'.
CONCATENATE s1 s2 INTO s3.
WRITE / s3.
CONCATENATE s1 s2 INTO s3 SEPARATED BY sep.
WRITE / s3.
輸出結果如下:
FNameSName
FName.SName
注意所有字串操作將忽略s1...sn中的尾部空格
2,拆分字串:使用SPLIT語句將字串拆分成多個小串。
語法:SPLIT s_source AT sep INTO s1 ... sn.
在源字串中搜索分隔符(串)sep,根據該分隔符將源字串拆分成各個小串,然後放到目標欄位s1 ... sn中,但是子字串中不包括分隔符。
語法:SPLIT s_source AT sep INTO TABLE itab.
若源字串能夠拆分的子串多過指定數目,則使用內表操作,該形式根據子串數生成n行的內表
簡單例項:REPORT z_string_split.
DATA: text TYPE string,
itab TYPE TABLE OF string.
text = 'YOU ARE GOOD BOY'.
SPLIT text AT space INTO TABLE itab.
LOOP AT itab INTO text.
WRITE / text.
ENDLOOP.
space其實就是text字字串中的空格,語句LOOP AT用於迴圈出內表的每一行資料
輸出結果:
YOU
ARE
GOOD
BOY
語法:SEARCH c FOR str.
模式:
str 搜尋str並忽略尾部空格。
.str. 搜尋str,但忽略尾部空格。
*str 搜尋以str結尾的單詞。
str* 搜尋以str開頭的單詞。
簡單例項:
REPORT z_string_search.
DATA: string(30) TYPE c VALUE 'This is a testing sentence.'.
WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
SEARCH string FOR 'x'.
WRITE: / 'x', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR 'itt '.
WRITE: / 'itt ', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR '.e.'.
WRITE: / '.e.', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR '*e'.
WRITE: / '*e', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
SEARCH string FOR 's*'.
WRITE: / 's*', sy-subrc UNDER 'SY-SUBRC',
sy-fdpos UNDER 'SY-FDPOS'.
輸出結果:
Searched SY-SUBRC SY-FDPO
x 4 0
itt 4 0
.e. 4 0
*e 0 18
s* 0 18
4,替換欄位內容:用其他字串替換欄位的某些部分,使用REPLACE語句。
語法:REPLACE str1 WITH str2 INTO s_dest [LENGTH len].
對欄位s_dest進行搜尋,如果出現str1,則用str2替換第一次出現的部分。len指定搜尋長度,替換成功了SY-SUBRC返回0,非則未進行任何替換。
簡單例項:
REPORT z_replace.
DATA: name TYPE string.
name = 'Michael-Cheong'.
WHILE sy-subrc = 0.
REPLACE '-' WITH ' ' INTO name.
ENDWHILE.
WRITE / name.
輸出結果:Michael Cheong
5,確定字串長度:從首字元到最後一個非空字元的長度,即不幫擴結尾空格,使用STRLEN。
語法:[COMPUTE] n = STRLEN( str ).
簡單例項:
REPORT z_strlen.
DATA: text(24) TYPE c VALUE 'ABAP Language',
len TYPE i.
len = strlen( text ).
WRITE: / 'Length of', text, 'is', len.
輸出結果:Length of ABAP Language is 13
6,其他操作語句:
SHIFT 截斷字串
CONDENSE 刪除多餘空格
TRANSLATE 字元轉換
CONVERT TEXT 建立可排序的格式
OVERLAY 字元覆蓋