ABAP中字符串處理方法小結(一)


1, 拆分字符串split

語法:

SPLIT <c> AT <del> INTO <c1> ... <cn>.

代碼:

DATA: STRING(60),
      P1(20) VALUE '',
      P2(20) VALUE '',
      P3(20) VALUE '',
      P4(20) VALUE '',
      DEL(3) VALUE '***'.
STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'.
WRITE STRING.
SPLIT STRING AT DEL INTO P1 P2 P3 P4.
WRITE: /'P1:' , P1.
WRITE: /'P2:' , P2.
WRITE: /'P3:' , P3.
WRITE: /'P4:' , P4.

2, 連接字符串Concatenate

語法:

CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].

代碼:

DATA: C1(10)  VALUE  'Sum',
      C2(3)   VALUE  'mer',
      C3(5)   VALUE  'holi ',
      C4(10)  VALUE  'day',
      C5(30),
      SEP(3)  VALUE ' - '.
CONCATENATE C1 C2 C3 C4 INTO C5.
WRITE C5.
CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.
WRITE / C5.

顯示結果:

在 C1 到 C5 之間,忽略 尾部空格。 分隔符 SEP 保留尾部空格。

3, 獲得字符串長度STRLEN

語法:

[COMPUTE] <n> = STRLEN( <c> ).

代碼:

DATA: int       TYPE i,
      word1(20) TYPE c VALUE '12345',
      word2(20) TYPE c,
      word3(20) TYPE c VALUE '   4         '.
int = strlen( word1 ).
WRITE   int.
int = strlen( word2 ).
WRITE / int.
int = strlen( word3 ).
WRITE / int.

顯示結果:

請注意,STRLEN 將操作數 <c> 作為字符數 據類型處理 ,而不考慮 其實際類型 。不進行轉換。

4, 刪除字段中空格CONDENSE

語法:

CONDENSE <c> [NO-GAPS].

該語句去除字段 <c> 中的前導空格並用一個空格替換其它空格序列 。結果是左對齊單詞, 每個單詞用空格隔開。 如果指定附 加的 NO-GAPS, 則去除所有空格。

DATA: STRING(25) VALUE ' one  two   three    four',
      LEN TYPE I.
LEN = STRLEN( STRING ).
WRITE: STRING, '!'.
WRITE: / 'Length: ', LEN.
CONDENSE STRING.
LEN = STRLEN( STRING ).
WRITE: STRING, '!'.
WRITE: / 'Length: ', LEN.
CONDENSE STRING NO-GAPS.
LEN = STRLEN( STRING ).
WRITE: STRING, '!'.
WRITE: / 'Length: ', LEN.

顯示結果:

請注意,字段 STRING 的總長度保持不變(注意!的位置),但刪除的空格再次出現在右邊。

5, 搜索字符串SEARCH

語法:

SEARCH <c> FOR <str> <options>.

該語句在字 段 <c> 中搜索<str> 中的字符串 。如果成功 ,則將 SY-SUBRC 的返回代碼 值設置為0,並將 SY-FDPOS 設置為字段 <c> 中該字符串 的偏移量。

否則將 SY-SUBRC 設置為4。

搜索串 <str> 可為下列格 式之一:

<str>                       目 的

---------------------------------

<pattern>                 搜 索 <pattern>(任何字符順序)。忽略尾部空格。

.<pattern>.               搜 索 <pattern> ,但是不忽略尾部空格 。

*<pattern>               搜 索以 <pattern> 結尾的詞。

<pattern>*               搜 索以 <pattern> 開始的詞。

單詞之間用 空格、逗號 、句號、分 號、冒號、 問號、嘆號 、括號、斜 杠、加號和等號等分隔 。

代碼:

DATA STRING(30) VALUE 'This is a little sentence.'.
WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
ULINE /1(26).
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'.

顯示結果:

搜索字符字 段 <c> 的各種選項 (<options>) 如下:

  • ABBREVIATED

在字段 <c> 中搜索包含 <str> 中的單詞, 其中字符可以被其它字符隔開,但是單詞和字符串的第一個字母必須相同 。

  •  STARTING AT <n1>

在字段 <c> 中搜索從 <n1> 開始的 <str> 。結果 SY-FDPOS 參照相對於 <n1> 的偏移量而 不是字段的 開始。

  • ENDING AT <n2>

在字段 <c> 搜索 <str> 直到位置 <n2>。

  •  AND MARK

如果找到搜索串,則將搜索串中的所有字符(使用 ABBREVIATED 時的所有字 符)轉換為大寫形式。

代碼:

DATA: STRING(30) VALUE 'This is a fast first example.',
      POS TYPE I,
      OFF TYPE I.
WRITE / STRING.
SEARCH STRING FOR 'ft' ABBREVIATED.
WRITE: / 'SY-FDPOS:', SY-FDPOS.
POS = SY-FDPOS + 2.
SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.
WRITE / STRING.
WRITE: / 'SY-FDPOS:', SY-FDPOS.
OFF = POS + SY-FDPOS - 1.
WRITE: / 'Off:', OFF.

請注意,在 找到單詞‘ fast’ 之后,為了 查找包含‘ ft’的第 二個單詞, 必須在偏移 量 SY-FDPOS 上加2,然 后從位置 POS 開始查找。 否則,會再 次找到單詞 ‘fast’ 。要獲得‘ first’ 相對於字段 STRING 開始的偏移 量,從 POS 和 SY-FDPOS 計算。

字符串: 'Aaa-Bbb'  如何判斷字符串中含有 '-'?

並且將 '-' 后面的字符舍去?

DATA string(20) VALUE 'Aaa-Bbb'.

SEARCH string FOR '-'.
IF sy-subrc = 0.  
    string = string+0(sy-fdpos).  
    WRITE string.
ENDIF.

6, 覆蓋字符字段OVERLAY

語法:

OVERLAY <c1> WITH <c2> [ONLY <str>].

該語句用字符串 <c2> 中相應位置上的內容“覆蓋” 字段 <c1> 中包含 <str> 中字母的所有位置。<c2> 保持不變。

如果省略 ONLY <str>, 則覆蓋字段 <c1> 中所有包含空格的位置 ,如果沒有空格,則<c1>不會被“覆蓋”。 如果至少要替換 <c1> 中的一個字 符,則將 SY-SUBRC 設置為 0。對於所有其它情況 ,將SY-SUBRC 設置為 4。

如果 <c1> 比 <c2> 長,則只覆 蓋 <c2> 中的長度。

解釋:

注意是"覆蓋"不是”替換“!!!!!!!!!

OVER '1 2 3' WITH '456   '.

結果為:152 3。

OVER '1 2 3' WITH '456' only '12'.

結果為:4 6 3 。

OVER '123' WITH '456'.

結果為:123。(沒有空格)

OVER '1 2 3 ' WITH '456   ' only '13' .

結果為:4 2   。

代碼:

DATA: T(10) VALUE 'a c e g i ',
      STRING LIKE T,
      OVER(10) VALUE 'ABCDEFGHIJ',
      STR(2) VALUE 'ai'.
STRING = T.
WRITE STRING.
WRITE / OVER.
OVERLAY STRING WITH OVER.
WRITE / STRING.
STRING = T.
OVERLAY STRING WITH OVER ONLY STR.
WRITE / STRING.

顯示結果:

T 與 OVER 的長度都是10。

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM