1. 程式人生 > >ABAP中的字串操作

ABAP中的字串操作

1,連線字串:將幾個字串連線起來,形成一個新的字串,可以使用CONCATENATE語句,SEPARATED BY用於指定一個字元(串)作為分隔符,在構成新字串時插入s1...sn之間。

語法: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

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 字元覆蓋