sap abap 对字符串的操作
生活随笔
收集整理的這篇文章主要介紹了
sap abap 对字符串的操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
替換字段內容
REPLACE [FIRST /ALL OCCURRENCES OF]<STR1>INTO <STR> WITH <STR2>
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA STR2 TYPE C ?LENGTH 4 VALUE 'SDFH'.
REPLACE FIRST OCCURRENCE OF STR1 IN STR ?WITH 'SDFH'.
REPLACE FIRST OCCURRENCE OF STR1 IN STR ?WITH STR2.
REPLACE FIRST OCCURRENCE OF 'HOW' IN STR ?WITH STR2.
替換字符串STR 中第一次出現STR1 的地方.
OF 后面跟被替換的內容,可以是變量和常數,
WITH 后面跟要替換的內容,可以是變量和常數。 ? ??
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
REPLACE ALL OCCURRENCES OF STR1 IN STR ?WITH STR2.
替換字符串STR 中所有出現STR1 的地方.
REPLACE ?STR1 IN STR ?WITH STR2 .
默認只替換第一次出現的地方.
REPLACE <STR1> WITH <STR2> INTO <STR> [LENGTH <1>]
只能替換字符串STR 中第一次出現STR1 的地方.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA STR2 TYPE C ?LENGTH 4 VALUE 'SDFH'.
REPLACE ?STR1 ?WITH STR2 INTO STR ?LENGTH '2'.
LENGTH '2' 表示被替換的字符長度。
REPLACE ?STR1 ?WITH STR2 INTO STR.
沒有LENGTH 默認全部替換
注意
FIRST /ALL OCCURRENCES OF 不能與 LENGTH 同時用,兩種語法間的區別。
轉換大/小寫
將字符串轉換成大寫
DATA STR3 TYPE C ?LENGTH 50 VALUE ?' qaewrwetW'.
TRANSLATE STR3 TO UPPER CASE.
將字符串轉換成小寫
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
TRANSLATE STR TO LOWER ?CASE.
查找字符串
若要查看結果,將查找結果放入查找結果表中.
ABAP 中有專門的存放查找結果的表類型MATCH_RESULT_TAB.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA RESLT TYPE MATCH_RESULT_TAB.
FIND FIRST OCCURRENCE OF STR1 IN STR RESULTS RESLT.
找出字符串STR 中第一次出現字符串 STR1 的地方。
查找結果是行數(第0行),起始位數(第4位),長度(3位)
起始位數19,長度3
起始位數4,長度3
? 找出字符串STR 中所有出現字符串 STR1 的地方。
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
FIND ALL OCCURRENCES OF STR1 IN STR RESULTS RESLT.
獲得字符串長度.
STRLEN(<c>) :<c>數據類型只能是C,N,D,T
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA INT1 TYPE I.
INT1 = STRLEN( STR ).
獲取字符串STR的長度,結果放入變量INT1 中.
INT1 = STRLEN( 'STR' ).
注意:括號內兩邊要有空格,括號內可以是常量,也可以是變量.
D,T數據類型的長度是固定的,為8位和6位,而C,N 型根據實際情況.
壓縮字段內容
單個單詞時
DATA STR4 TYPE C ?LENGTH 10 VALUE ' ?HOW ?'.
CONDENSE STR4.
去掉單詞兩邊得空格。
有多個單詞時,單詞之間用空格隔開,其余空格全部去掉。
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?NO-GAPS.
NO-GAPS作用,去除所有的空格。
在定義時,如果指定了字符串長度,WRITE輸出時,輸出長度等于定義長度
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
WRITE :str,'!'.
50位
DATA STR TYPE STRING VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
WRITE :str,'!'.
注意:CONDENSE 后面的變量只能是C,N,D,T類型的。
DATA INT1(15) TYPE N VALUE '21 ?02 ? ?3'.
CONDENSE ?INT1 ?
對于N型數據,CONDENSE去掉空格后,會在前面補充前導0.
DATA INT1 TYPE D VALUE '21 ?2 ?3'.
CONDENSE ?INT1 ?.
DATA INT1 TYPE T VALUE '22 ?3 '.
CONDENSE ?INT1 ?.
連接字符串
CONCATENATE <c1> ... <cn> INTO<c> [SEPARATED BY <s>].
DATA STR1 TYPE ?STRING VALUE ' AB01 ' ?.
DATA STR2 TYPE ?STRING VALUE ' CD02 '.
DATA STR TYPE ?STRING .
CONCATENATE ?STR1 STR2 INTO STR ?.
被去掉了
? DATA STR1 TYPE ?STRING VALUE ' AB01 ? ? ? ? ' ?.
DATA STR2 TYPE ?STRING VALUE ' ? ? CD02 '.
5位空格
DATA STR1 TYPE ?STRING VALUE ' AB01 ? ? ? ? ' ?.
DATA STR2 TYPE ?STRING VALUE 'CD02 '.
通過對比,拼接時會自動去掉拼接對象后面的空格,而前面的空格保留。
SEPARATED BY ?拼接時用什么隔開。
CONCATENATE ?STR1 STR2 INTO STR SEPARATED BY ',' ?.
TAB鍵隔開.
CONCATENATE ?STR1 STR2 INTO STR?
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB .
TAB 鍵在這里無法顯示,以#號鍵表示
日期拼接
DATA INT1 TYPE ?D VALUE '20110218' ?.
DATA INT2 TYPE ? D VALUE '20110219'.
DATA STR TYPE ?STRING .
CONCATENATE ?INT1 INT2 ?INTO STR.
時間拼接
DATA INT1 TYPE ?T VALUE '123226' ?.
DATA INT2 TYPE ? T VALUE '112336'.
DATA STR TYPE ?STRING .
CONCATENATE ?INT1 INT2 ?INTO STR.
數字文本拼接
DATA INT1(6) TYPE ?N VALUE '123226' ?.
DATA INT2(6) TYPE ? N VALUE '112336'.
DATA STR(12) TYPE ?N .
CONCATENATE ?INT1 INT2 ?INTO STR.
注意:C,N,D,T類型的數據可拼接,I,F,P,X類型的數據 不能拼接。
D,T型拼接時,因為都是定長度,如果用DT類型接收,只能取到第一條數據,失去拼接的意義,所以接收類型定為STRING或N型。
4位空格
? 拼接時,若要保留字符串后面的空格,使用偏移量方法。
1位空格
5位空格
? DATA STR1 TYPE ?STRING VALUE ' AB01 ? ?' ?.
DATA STR2 TYPE ?STRING VALUE ' CD02 '.
DATA STR3 TYPE ?STRING VALUE ' EF03 '.
DATA STR TYPE ?C LENGTH 16.
STR+0(9) = STR1.
STR+9(5) = STR2.
使用偏移量時注意:(1)括號前面的數字位開始位,括號里面的數字為長度。
(2)接收的變量需要指定長度,不能用STRING類型.
?拆分字符串
SPLIT <c> AT <del> INTO <c1> ...<cn>.
DATA STR1 TYPE ?STRING .
DATA STR2 TYPE ?STRING .
DATA STR3 TYPE ?STRING .
DATA STR TYPE ?STRING VALUE 'OK,GOOD,NICE'.
SPLIT STR AT',' INTO STR1 STR2 ?STR3.
DATA STR4 TYPE C VALUE ','.
SPLIT STR AT STR4 INTO STR1 STR2 ?STR3.
將字符串STR 按‘,’拆分,放入變量STR1 STR2 STR3 中.
按字母拆分時,需要識別大小寫
注意以上各部分的變化,先將字符串做TAB 拼接,因TAB 鍵在這里無法顯示,以’#’號表示,但這里的‘#’號不代表#號鍵,所以在用按’#’號拆分時無法成功。這里的’#’代表的是TAB鍵,只能用TAB 拆分.
REPLACE [FIRST /ALL OCCURRENCES OF]<STR1>INTO <STR> WITH <STR2>
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA STR2 TYPE C ?LENGTH 4 VALUE 'SDFH'.
REPLACE FIRST OCCURRENCE OF STR1 IN STR ?WITH 'SDFH'.
REPLACE FIRST OCCURRENCE OF STR1 IN STR ?WITH STR2.
REPLACE FIRST OCCURRENCE OF 'HOW' IN STR ?WITH STR2.
替換字符串STR 中第一次出現STR1 的地方.
OF 后面跟被替換的內容,可以是變量和常數,
WITH 后面跟要替換的內容,可以是變量和常數。 ? ??
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
REPLACE ALL OCCURRENCES OF STR1 IN STR ?WITH STR2.
替換字符串STR 中所有出現STR1 的地方.
REPLACE ?STR1 IN STR ?WITH STR2 .
默認只替換第一次出現的地方.
REPLACE <STR1> WITH <STR2> INTO <STR> [LENGTH <1>]
只能替換字符串STR 中第一次出現STR1 的地方.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA STR2 TYPE C ?LENGTH 4 VALUE 'SDFH'.
REPLACE ?STR1 ?WITH STR2 INTO STR ?LENGTH '2'.
LENGTH '2' 表示被替換的字符長度。
REPLACE ?STR1 ?WITH STR2 INTO STR.
沒有LENGTH 默認全部替換
注意
FIRST /ALL OCCURRENCES OF 不能與 LENGTH 同時用,兩種語法間的區別。
轉換大/小寫
將字符串轉換成大寫
DATA STR3 TYPE C ?LENGTH 50 VALUE ?' qaewrwetW'.
TRANSLATE STR3 TO UPPER CASE.
將字符串轉換成小寫
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
TRANSLATE STR TO LOWER ?CASE.
查找字符串
若要查看結果,將查找結果放入查找結果表中.
ABAP 中有專門的存放查找結果的表類型MATCH_RESULT_TAB.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
DATA RESLT TYPE MATCH_RESULT_TAB.
FIND FIRST OCCURRENCE OF STR1 IN STR RESULTS RESLT.
找出字符串STR 中第一次出現字符串 STR1 的地方。
查找結果是行數(第0行),起始位數(第4位),長度(3位)
起始位數19,長度3
起始位數4,長度3
? 找出字符串STR 中所有出現字符串 STR1 的地方。
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA STR1 TYPE C ?LENGTH 3 VALUE 'HOW'.
FIND ALL OCCURRENCES OF STR1 IN STR RESULTS RESLT.
獲得字符串長度.
STRLEN(<c>) :<c>數據類型只能是C,N,D,T
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
DATA INT1 TYPE I.
INT1 = STRLEN( STR ).
獲取字符串STR的長度,結果放入變量INT1 中.
INT1 = STRLEN( 'STR' ).
注意:括號內兩邊要有空格,括號內可以是常量,也可以是變量.
D,T數據類型的長度是固定的,為8位和6位,而C,N 型根據實際情況.
壓縮字段內容
單個單詞時
DATA STR4 TYPE C ?LENGTH 10 VALUE ' ?HOW ?'.
CONDENSE STR4.
去掉單詞兩邊得空格。
有多個單詞時,單詞之間用空格隔開,其余空格全部去掉。
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?NO-GAPS.
NO-GAPS作用,去除所有的空格。
在定義時,如果指定了字符串長度,WRITE輸出時,輸出長度等于定義長度
DATA STR TYPE C ?LENGTH 50 VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
WRITE :str,'!'.
50位
DATA STR TYPE STRING VALUE ?' ? ?HOW ? ?ARE YOU HOW'.
CONDENSE ?STR ?.
WRITE :str,'!'.
注意:CONDENSE 后面的變量只能是C,N,D,T類型的。
DATA INT1(15) TYPE N VALUE '21 ?02 ? ?3'.
CONDENSE ?INT1 ?
對于N型數據,CONDENSE去掉空格后,會在前面補充前導0.
DATA INT1 TYPE D VALUE '21 ?2 ?3'.
CONDENSE ?INT1 ?.
DATA INT1 TYPE T VALUE '22 ?3 '.
CONDENSE ?INT1 ?.
連接字符串
CONCATENATE <c1> ... <cn> INTO<c> [SEPARATED BY <s>].
DATA STR1 TYPE ?STRING VALUE ' AB01 ' ?.
DATA STR2 TYPE ?STRING VALUE ' CD02 '.
DATA STR TYPE ?STRING .
CONCATENATE ?STR1 STR2 INTO STR ?.
被去掉了
? DATA STR1 TYPE ?STRING VALUE ' AB01 ? ? ? ? ' ?.
DATA STR2 TYPE ?STRING VALUE ' ? ? CD02 '.
5位空格
DATA STR1 TYPE ?STRING VALUE ' AB01 ? ? ? ? ' ?.
DATA STR2 TYPE ?STRING VALUE 'CD02 '.
通過對比,拼接時會自動去掉拼接對象后面的空格,而前面的空格保留。
SEPARATED BY ?拼接時用什么隔開。
CONCATENATE ?STR1 STR2 INTO STR SEPARATED BY ',' ?.
TAB鍵隔開.
CONCATENATE ?STR1 STR2 INTO STR?
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB .
TAB 鍵在這里無法顯示,以#號鍵表示
日期拼接
DATA INT1 TYPE ?D VALUE '20110218' ?.
DATA INT2 TYPE ? D VALUE '20110219'.
DATA STR TYPE ?STRING .
CONCATENATE ?INT1 INT2 ?INTO STR.
時間拼接
DATA INT1 TYPE ?T VALUE '123226' ?.
DATA INT2 TYPE ? T VALUE '112336'.
DATA STR TYPE ?STRING .
CONCATENATE ?INT1 INT2 ?INTO STR.
數字文本拼接
DATA INT1(6) TYPE ?N VALUE '123226' ?.
DATA INT2(6) TYPE ? N VALUE '112336'.
DATA STR(12) TYPE ?N .
CONCATENATE ?INT1 INT2 ?INTO STR.
注意:C,N,D,T類型的數據可拼接,I,F,P,X類型的數據 不能拼接。
D,T型拼接時,因為都是定長度,如果用DT類型接收,只能取到第一條數據,失去拼接的意義,所以接收類型定為STRING或N型。
4位空格
? 拼接時,若要保留字符串后面的空格,使用偏移量方法。
1位空格
5位空格
? DATA STR1 TYPE ?STRING VALUE ' AB01 ? ?' ?.
DATA STR2 TYPE ?STRING VALUE ' CD02 '.
DATA STR3 TYPE ?STRING VALUE ' EF03 '.
DATA STR TYPE ?C LENGTH 16.
STR+0(9) = STR1.
STR+9(5) = STR2.
使用偏移量時注意:(1)括號前面的數字位開始位,括號里面的數字為長度。
(2)接收的變量需要指定長度,不能用STRING類型.
?拆分字符串
SPLIT <c> AT <del> INTO <c1> ...<cn>.
DATA STR1 TYPE ?STRING .
DATA STR2 TYPE ?STRING .
DATA STR3 TYPE ?STRING .
DATA STR TYPE ?STRING VALUE 'OK,GOOD,NICE'.
SPLIT STR AT',' INTO STR1 STR2 ?STR3.
DATA STR4 TYPE C VALUE ','.
SPLIT STR AT STR4 INTO STR1 STR2 ?STR3.
將字符串STR 按‘,’拆分,放入變量STR1 STR2 STR3 中.
按字母拆分時,需要識別大小寫
注意以上各部分的變化,先將字符串做TAB 拼接,因TAB 鍵在這里無法顯示,以’#’號表示,但這里的‘#’號不代表#號鍵,所以在用按’#’號拆分時無法成功。這里的’#’代表的是TAB鍵,只能用TAB 拆分.
總結
以上是生活随笔為你收集整理的sap abap 对字符串的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SMARTFORM字段参数设置解决S
- 下一篇: MRP例外信息详解