ABAP 字符串處理

SAP ABAP 處理字符串串串串串串串串(詳細)

關於ABAP中處理字符串的方法,很是詳細,學習過程當中總結一下分享給你們,,,html

ABAP/4 提供多個處理類型 C 即字符串 的數據對象的關鍵字。post

處理字符串 的方法有:學習

 

1.拆分字符串splitthis

2.鏈接字符串編碼

3.得到字符串長度url

4.壓縮字段內容(去空格)spa

5.搜索字符串code

6.覆蓋字符字段xml

7.替換字段內容htm

8.轉換大/小寫並替換字符

9.轉換爲可排序格式

10.根據第一個或最後一個字符移動字段串SHIFT

11.MOVE TO 分配字符串部分

12.字符串的比較

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

1.拆分字符串

語法:

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

複製代碼
 1 DATA: STRING(60),
 2       P1(20) VALUE '',
 3       P2(20) VALUE '',
 4       P3(20) VALUE '',
 5       P4(20) VALUE '',
 6       DEL(3) VALUE '***'.
 7 STRING = ' Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5'.
 8 WRITE STRING.
 9 SPLIT STRING AT DEL INTO P1 P2 P3 P4.
10 WRITE: /'P1:' , P1.
11 WRITE: /'P2:' , P2.
12 WRITE: /'P3:' , P3.
13 WRITE: /'P4:' , P4.
複製代碼

該過程的輸 出以下:  

Part 1 *** Part 2 *** Part 3 *** Part 4 *** Part 5

P1:Part 1  

P2:Part 2  

P3:Part 3  

P4:Part 4 *** Part 5

2.鏈接字符串

語法:

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

複製代碼
 1 DATA: C1(10)  VALUE  'Sum',
 2       C2(3)   VALUE  'mer',
 3       C3(5)   VALUE  'holi ',
 4       C4(10)  VALUE  'day',
 5       C5(30),
 6       SEP(3)  VALUE ' - '.
 7 CONCATENATE C1 C2 C3 C4 INTO C5.
 8 WRITE C5.
 9 CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.
10 WRITE / C5.
複製代碼

該過程的輸 出以下:

Summerholiday

Sum - mer - holi - day

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

3.得到字符串長度

語法:

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

複製代碼
 1 DATA: INT TYPE I,
 2       WORD1(20) VALUE '12345'. 
 3       WORD2(20).
 4       WORD3(20) VALUE '   4         '. 
 5 INT = STRLEN( WORD1 ). 
 6 WRITE   INT.
 7 INT = STRLEN( WORD2 ). 
 8 WRITE / INT.
 9 INT = STRLEN( WORD3 ). 
10 WRITE / INT.
複製代碼

結果分別是 5,0 和 4。

WORD3(20) VALUE '   4         '. 結果爲 4 。

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

4.壓縮字段內容

語法:

CONDENSE <c> [NO-GAPS].

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

複製代碼
 1 DATA: STRING(25) VALUE ' one  two   three    four',
 2       LEN TYPE I.
 3 LEN = STRLEN( STRING ).
 4 WRITE: STRING, '!'.
 5 WRITE: / 'Length: ', LEN.
 6 CONDENSE STRING.
 7 LEN = STRLEN( STRING ).
 8 WRITE: STRING, '!'.
 9 WRITE: / 'Length: ', LEN.
10 CONDENSE STRING NO-GAPS.
11 LEN = STRLEN( STRING ).
12 WRITE: STRING, '!'.
13 WRITE: / 'Length: ', LEN.
複製代碼

該過程的輸出以下:  

one  two   three    four !

Length:          25

one two three four       !

Length:          18

onetwothreefour          !

Length:          15

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

5.搜索字符串

語法:

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> 開始的詞。  

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

複製代碼
 1 DATA STRING(30) VALUE 'This is a little sentence.'.
 2 WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.
 3 ULINE /1(26).
 4 SEARCH STRING FOR 'X'.
 5 WRITE: / 'X', SY-SUBRC UNDER 'SY-SUBRC',
 6                SY-FDPOS UNDER 'SY-FDPOS' 
 7 SEARCH STRING FOR 'itt   '.
 8 WRITE: / 'itt   ', SY-SUBRC UNDER 'SY-SUBRC',
 9                    SY-FDPOS UNDER 'SY-FDPOS' 
10 SEARCH STRING FOR '.e .'.
11 WRITE: / '.e .', SY-SUBRC UNDER 'SY-SUBRC',
12                   SY-FDPOS UNDER 'SY-FDPOS'.
13 SEARCH STRING FOR '*e'.
14 WRITE: / '*e ', SY-SUBRC UNDER 'SY-SUBRC',
15                 SY-FDPOS UNDER 'SY-FDPOS'.
16 
17 SEARCH STRING FOR 's*'.
18 WRITE: / 's* ', SY-SUBRC UNDER 'SY-SUBRC',
19                 SY-FDPOS UNDER 'SY-FDPOS'.
複製代碼

該過程的輸 出以下:

SEARCHED   SY-SUBRC   SY-FDPOS

X                   4               0

itt                  0               11

.e .            0            15

*e             0            10

s*                 0                17

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

  • ABBREVIATED

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

  •  STARTING AT <n1>

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

  • ENDING AT <n2>

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

  •  AND MARK

若是找到搜索串,則將搜索串中的全部字符(使用 ABBREVIATED 時的全部字 符)轉換爲大寫形式。

複製代碼
 1 DATA: STRING(30) VALUE 'This is a fast first example.',
 2       POS TYPE I,
 3       OFF TYPE I.
 4 WRITE / STRING.
 5 SEARCH STRING FOR 'ft' ABBREVIATED.
 6 WRITE: / 'SY-FDPOS:', SY-FDPOS.
 7 POS = SY-FDPOS + 2.
 8 SEARCH STRING FOR 'ft' ABBREVIATED STARTING AT POS AND MARK.
 9 WRITE / STRING.
10 WRITE: / 'SY-FDPOS:', SY-FDPOS.
11 OFF = POS + SY-FDPOS -1.
12 WRITE: / 'Off:', OFF.
複製代碼

該過程的輸出以下:

This is a fast first example.

SY-FDPOS:    10

This is a fast FIRST example.

SY-FDPOS:    4

Off:        15

請注意,在 找到單詞‘ 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 <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.
複製代碼

該過程的輸 出以下:

a c e g i

ABCDEFGHIJ

aBcDeFgHiJ

A c e g I

T 與 OVER 的長度都是10。

7.替換字段內容

語法:

REPLACE <str1> WITH <str2> INTO <c> [LENGTH <l>].

  ABAP/4 搜索字段 <c> 中模式 <str1> 前 <l> 個位置第一 次出現的地 方。若是未 指定長度, 按全長度搜 索模式 <str1>。 而後,語句 將模式 <str1> 在字段 <c> 中第一次出 現的位置用 字符串 <str2> 替換。若是 指定長度<l>, 則只替換模 式的相關部 分。 若是將系統 字段 SY-SUBRC 的返回代碼 設置爲0, 則說明在 <c> 中找到 <str1> 且已用<str2> 替換。非 0 的返回代碼 值意味着未 替換。

<str1>、 <str2> 和 <len> 可爲變量。

複製代碼
 1 DATA: T(10) VALUE 'abcdefghij',
 2       STRING LIKE T,
 3       STR1(4) VALUE 'cdef',
 4       STR2(4) VALUE 'klmn',
 5       STR3(2) VALUE 'kl',
 6       STR4(6) VALUE 'klmnop',
 7       LEN TYPE I VALUE 2.
 8 STRING = T.
 9 WRITE STRING.
10 REPLACE STR1 WITH STR2 INTO STRING.
11 WRITE / STRING.
12 STRING = T.
13 REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.
14 WRITE / STRING.
15 STRING = T.
16 REPLACE STR1 WITH STR3 INTO STRING.
17 WRITE / STRING.
18 STRING = T.
19 REPLACE STR1 WITH STR4 INTO STRING.
20 WRITE / STRING.
複製代碼

該過程的輸 出以下:

abcdefghij

abklmnghij

abklmnefgh

abklghij

abklmnopgh

請注意,在最後一行中字段 STRING 是如何在右 邊截斷的。長度爲 4 的搜索模式 ‘cdef’ 用長度爲6的 ‘klmnop’ 替換。而後 ,填充字段 STRING 的剩餘部分直到字段結尾。

8.轉換大/小寫並替換字符

能夠將字母 轉換大/小 寫或使用替 換規則。 要轉換大/小 寫,請使用 TRANSLATE 語句,用法 以下:

語法

TRANSLATE <c> TO UPPER CASE. TRANSLATE <c> TO LOWER CASE.

這些語句將 字段 <c> 中的全部小 寫字母轉換 成大寫或反 之。

使用替換規 則時,請使 用如下語法 :

語法

TRANSLATE <c> USING <r>.

該語句根據 字段 <r> 中存儲的替 換規則替換 字段 <c> 的全部字符 。<r> 包含成對字 母,其中每 對的第一個 字母用第二 個字母替換 。<r> 可爲變量。 有關包含更 複雜替換規 則的 TRANSLATE 語句的更多 變體,參見 關鍵字文檔 。

複製代碼
 1 DATA: T(10) VALUE 'AbCdEfGhIj',
 2       STRING LIKE T,
 3       RULE(20) VALUE 'AxbXCydYEzfZ'.
 4 STRING = T.
 5 WRITE STRING.
 6 TRANSLATE STRING TO UPPER CASE.
 7 WRITE / STRING.
 8 STRING = T.
 9 TRANSLATE STRING TO LOWER CASE.
10 WRITE / STRING.
11 STRING = T.
12 TRANSLATE STRING USING RULE.
13 WRITE / STRING.
複製代碼

該過程的輸 出以下:

AbCdEfGhIj

ABCDEFGHIJ

abcdefghij

xXyYzZGhIj

9.轉換爲可排序格式

能夠將字符 字段轉換爲 可按字母順 序排列的格 式:

語法

CONVERT TEXT <c> INTO SORTABLE CODE <sc>.

該語句爲字 符字段 <c> 填充可排序 目標字段 <sc>。 字段 <c> 必須是類型 C且字段 <sc> 必須是類型 X ,最小長度 爲 <c> 長度的16倍 。 該語句目的 是爲字符字 段 <c>

建立相關字 段 <sc>, 做爲 <c> 的按字母順 序排列的排 序關鍵字。

若是對未轉 換的字符字 段進行排序 ,則系統創 建與各字母 的特定平臺 內部編碼相 對應的順序 。在對目標 字段進行排 序以後,轉 換 CONVERT TEXT 按這樣的方 式建立目標

字段,相應 的字符字段 順序按字母 排序。例如 ,在德語中 ,順序爲‘ Miller、 Moller、 M?ller、 Muller’ ,而不是‘ Miller、 Moller、 Muller、 M?ller’ 。

轉換方法依 賴於運行 ABAP/4 程序的文本 環境。文本 環境在用戶 主記錄中定 義。例外的 是能夠使用 以下語句, 在程序中設 置文本環境 :

語法

SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>].

該語句根據 語言 <lg> 設置文本環 境。對於選 項 COUNTRY, 只要特定國 家語言不一樣 ,就能夠在

語言之外指 定國家。對 於選項 MODIFIER, 只要一個國 家內語言不 同,就能夠 指定另外一個 標識符,例 如,排序順 序在電話簿 和詞典之間 不一樣。 字段 <lg>、 <cy> 和

<m> 必須是類型 C 且長度必須 與表 TCP0C 的關鍵字段 長度相等。 表 TCP0C 是一個表格 ,從中進行 平臺相關的 文本環境維 護。在語句 SET LOCALE 期間,系統 根據

TCP0C中 的條目設置 文本環境。 除了內部傳 送的平臺特 性以外,用 SET 語句指定表 關鍵字。如 果 <lg> 等於 SPACE ,則系統根 據用戶主記 錄設置文本 環境。若是 對於指

定的 關鍵字在表 中無條目, 則系統將產 生運行錯誤 。

文本環境影 響 ABAP/4 中依賴於字 符集的全部 操做。

10.移動字段內容

 按給定位置 數移動字段串

要按給定位 置數移動字 段內容,請 使用 SHIFT 語句,用法 以下:

語法

SHIFT <c> [BY <n> PLACES] [<mode>].

該語句將字 段 <c> 移動 <n> 個位置。如 果省略 BY <n> PLACES, 則將 <n> 解釋爲一個 位置。若是 <n> 是 0 或負值,則 <c> 保持不變。 若是 <n> 超過 <c> 長度,則 <c> 用空格填充 。<n> 可爲變量。 對不一樣(<mode>) 選項,能夠 按如下方式 移動字段 <c>:

  •  LEFT:向左移動 <n> 位置,右邊 用 <n> 個空格填充 (默認設置 )。
  •  RIGHT:向右移動 <n> 位置,左邊 用 <n> 個空格填充 。
  •  CIRCULAR:向左移動 <n> 位置,以便 左邊 <n> 個字符出現 在右邊。
複製代碼
 1 DATA: T(10) VALUE 'abcdefghij',
 2       STRING LIKE T.
 3 STRING = T.
 4 WRITE STRING.
 5 SHIFT STRING.
 6 WRITE / STRING.
 7 STRING = T.
 8 SHIFT STRING BY 3 PLACES LEFT.
 9 WRITE / STRING.
10 STRING = T.
11 SHIFT STRING BY 3 PLACES RIGHT.
12 WRITE / STRING.
13 STRING = T.
14 SHIFT STRING BY 3 PLACES CIRCULAR.
15 WRITE / STRING.
複製代碼

輸出爲:

abcdefghij
bcdefghij
defghij
   abcdefg
defghijabc 

移動字段串 到給定串

要移動字段 內容以到給 定串,則使 用 SHIFT 語句,

語法:

SHIFT <c> UP TO <str> <mode>.

ABAP/4 查找 <c> 字段內容直 到找到字符 串 <str> 並將字段 <c> 移動到字段 邊緣。 <mode> 選項與按給定位置數移動字段串中所 述相同。<str> 可爲變量。 若是 <c> 中找不到 <str>, 則將 SY-SUBRC 設置爲 4 而且不移動 <c>。否 則,將 SY-SUBRC 設置爲0。

 

複製代碼
 1 DATA: T(10) VALUE 'abcdefghij',
 2       STRING LIKE T,
 3       STR(2) VALUE 'ef'.
 4 STRING = T.
 5 WRITE STRING.
 6 SHIFT STRING UP TO STR.
 7 WRITE / STRING.
 8 STRING = T.
 9 SHIFT STRING UP TO STR LEFT.
10 WRITE / STRING.
11 STRING = T.
12 SHIFT STRING  UP TO STR RIGHT.
13 WRITE / STRING.
14 STRING = T.
15 SHIFT STRING  UP TO STR CIRCULAR.
16 WRITE / STRING.
複製代碼

輸出以下:

abcdefghij
efghij
efghij
    abcdef
efghijabcd

根據第一個或最後一個 字符移動字段串

假設第一個或最後一個 字符符合必定條件,則 可用 SHIFT 語句將字段 向左或向右 移動。爲此 ,請使用以 下語法:

語法

SHIFT <c> LEFT  DELETING LEADING  <str>.

SHIFT <c> RIGHT DELETING TRAILING <str>.

假設左邊的 第一個字符 或右邊的最 後一個字符 出如今 <str> 中,該語句 將字段 <c> 向左或向右 移動。字段 右邊或左邊 用空格填充 。<str> 可爲變量。

複製代碼
 1 DATA: T(14) VALUE '    abcdefghij',
 2       STRING LIKE T,
 3       STR(6) VALUE 'ghijkl'.
 4 STRING = T.
 5 WRITE STRING.
 6 SHIFT STRING LEFT DELETING LEADING SPACE.
 7 WRITE / STRING.
 8 STRING = T.
 9 SHIFT STRING RIGHT DELETING TRAILING STR.
10 WRITE / STRING.
複製代碼

該過程輸出 以下:

    abcdefghij
abcdefghij
        abcdef

11.MOVE TO 分配字符串部分

MOVE 語句的如下 變體只使用 類型 C 字段:

語法:

MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].

將字符字段 <c1> 的左邊,百分比 <p>的部分複製到 <c2>,結果爲左對齊。 ( 若是用 RIGHT 選項指定, 則爲右對齊 )。<p> 值可爲 0 和 100 之間的任何數。將要從 <C1> 複製的長度 取整爲下一個整數。 若是語句中 某一參數不是類型 C,則忽略參數 PERCENTAGE。 

1 DATA: C1(10) VALUE 'ABCDEFGHIJ',
2       C2(10).
3 MOVE C1 TO C2 PERCENTAGE 40.
4 WRITE C2.
5 MOVE C1 TO C2 PERCENTAGE 40 RIGHT.
6 WRITE / C2.

該過程的輸 出以下:

ABCD

           ABCD

12.比較字符串

要比較字符 串(類型 C)和數字 文本(類型 N),能夠 在邏輯表達 式中使用下 列運算符。

<運算符>          含 義

CO                   僅包含

CN                   不只包含

CA                   包含任何

NA                   不包含任何

CS                   包含字符串

NS                   不包含字符串  

CP                    包含模式

NP                    不包含模式

由於除類型 N 和 C 外,系統不 能執行任何 其它類型轉 換,因此, 在進行包含 這些運算之 一的比較時 ,操做數應 該是類型 N 或 C。 運算符的功 能以下:

CO (僅包含)

若是 <f1> 僅包含 <f2> 中的字符, 則邏輯表達 式 <f1> CO <f2> 爲真。該比 較區分大小 寫,幷包括 尾部空格。 若是比較結 果爲真,則 系統字段 SY-FDPOS 包括 <f1> 的長度。如 果爲假,則 SY-FDPOS 包含 <f1> 中第一個未 在 <f2> 內出現的字 符的偏移量 。

CN (不只包含 )

若是 <f1> 還包含 <f2> 以外的其餘 字符,則邏 輯表達式 <f1> CN <f2> 爲真。該比 較區分大小 寫,幷包括 尾部空格。 若是比較結 果爲真,則 系統字段 SY-FDPOS 包含 <f1> 中第一個未 同時在 <f2> 中出現的字 符的偏移量 。若是爲假 ,SY-FDPOS 包含 <f1> 的長度。

CA (包含任何 )

若是 <f1> 至少包含 <f2> 的一個字符 ,則邏輯表 達式 <f1> CA <f2> 爲真。該比 較區分大小 寫。若是比 較結果爲真 ,則系統字 段 SY-FDPOS 包含 <f1> 中第一個也 在 <f2> 中出現的字 符的偏移量 。若是爲假 ,SY-FDPOS 包含 <f1> 的長度。

NA (不包含任 何)

若是 <f1> 不包含 <f2> 的任何字符 ,則邏輯表 達式 <f1> NA <f2> 爲真。該比 較區分大小 寫。若是比 較結果爲真 ,則系統字 段 SY-FDPOS 包含 <f1>的 長度。若是 爲假,則 SY-FDPOS 包含 <f1> 中在 <f2> 內出現的第 一個字符的 偏移量。

CS (包含字符 串)

若是 <f1> 包含字符串 <f2>, 則邏輯表達 式 <f1> CS <f2> 爲真。忽略 尾部空格並 且比較不區 分大小寫。 若是比較結 果爲真,則 系統字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。若是爲假 ,SY-FDPOS 包含 <f1> 的長度。

NS (不包含字 符串)

若是 <f1> 不包含字符 串 <f2>, 則邏輯表達 式 <f1> NS <f2> 爲真。忽略 尾部空格且 比較不區分 大小寫。如 果比較爲真 ,系統字段 SY-FDPOS 包含 <f1> 的長度。如 果爲假,系 統字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。

CP (包含模式 )

若是 <f1> 包含模式 <f2>, 則邏輯表達 式 <f1> CP <f2> 爲真。若是 <f2> 屬於類型 C,則能夠 在 <f2> 中使用下列 通配符:

  •  * 用於任何字 符串
  •  + 用於任何單 個字符

忽略尾部空 格且比較不 區分大小寫 。若是比較 結果爲真, 系統字段 SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。若是爲假 ,SY-FDPOS 包含 <f1> 的長度。 若是要對 <f2> 中的特殊字 符進行比較 ,請將換碼 字符 # 放到其前面 。能夠使用 換碼字符 # 指定

  • 大小寫字 符
  • 通配符 "*"(輸 入 #*)
  • 通配符 "+" (輸入 #+)
  • 換碼符號 自己 (輸入 ##)
  • 字符串結 尾的空格 (輸入 #___)

NP (不包含模 式)

若是 <f1> 不包含模式 <f2>, 則邏輯表達 式 <f1> NP <f2> 爲真。在<f2>中 ,能夠使用 與 CP 相同的通配 符和換碼字 符。 忽略尾部空 格且比較不 區分大小寫 。若是比較 結果爲真, 則系統字段 SY-FDPOS 包含 <f1>. 的長度,如 果爲假,SY-FDPOS 包含 <f2> 在 <f1> 中的偏移量 。

複製代碼
DATA: F1(5) TYPE C VALUE <f1>,
          F2(5) TYPE C VALUE <f2>.
IF F1 <operator> F2.
   WRITE: /  'Comparison true, SY-FDPOS=', SY-FDPOS.
ELSE.
   WRITE: /  'Comparison false, SY-FDPOS=', SY-FDPOS.
ENDIF.
複製代碼

下表列出該 程序的執行 結果,取決 於所用的運 算符和 F1 / F2 字段。

<f1>    <operator>    <f2>      Result     SY-FDPOS 
                                              
'BD   '      CO             'ABCD '      真          5 
                                              
'BD   '      CO         'ABCDE'      假          2 
                                              
'ABC12'    CN         'ABCD '      真          3  
                                              
'ABABC'    CN         'ABCD '      假          5 
                                              
'ABcde'     CA         'Bd   '         真          1 
                                              
'ABcde'     CA         'bD   '         假          5 
                                              
'ABAB '     NA         'AB   '         假          0 
                                              
'ababa'     NA         'AB   '         真          5 
                                              
'ABcde'     CS         'bC   '         真          1 
                                              
'ABcde'     CS         'ce   '          假          5 
                                              
'ABcde'     NS         'bC   '          假          1 
                                              
'ABcde'     NS         'ce   '          真          5 
                                              
'ABcde'     CP         '*b*'           真          1 
                                              
'ABcde'     CP         '*#b*'         假          5 
                                              
'ABcde'     NP         '*b*'           假          1 
                                              
'ABcde'     NP         '*#b*'         真          5

 

1. 字符串鏈接 CONCATENATE dobj1 dobj2 ... INTO result [IN { BYTE | CHARACTER } MODE] [SEPARATED BY sep].

2.字符串分隔, split 一個string的部分到一個內表或一系列的變量 SPLIT dobj AT sep INTO { {result1 result2 ...} | {TABLE result_tab} } [IN {BYTE|CHARACTER} MODE].

3. 字符串查找在一個字符串中查找模式串(FIND or SEARCH) FIND sub_string IN SECTION [OFFSET off] [LENGTH len] OF dobj --> 灰色部分用來縮小目的串被查找的範圍 [ IN { BYTE | CHARACTER } MODE ] [ { RESPECTING | IGNORING } CASE ] [ MATCH OFFSET moff ] [MATCH LENGTH mlen ].

FIND 'knows' IN SECTION OFFSET 5 OF 'Everybody knows this is nowhere' MATCH OFFSET moff " => moff = 10 MATCH LENGTH mlen. " => mlen= 5

在字符串dobj中查找pattern SEARCH dobj FOR pattern [IN { BYTE | CHARACTER } MODE] [STARTING AT p1] [ENDING AT p2] [ABBREVIATED] [AND MARK]. if sy-subrc = 0. then SY-FDPOS = 返回patterndobj中的位置 About pattern: 'pat' - 忽略尾部空格 '.pat.' -不忽略尾部空格 '*pat' - pat結尾 'pat*' - pat開始 單詞是指: 用 空格 , ; : ? ! () / + =分隔的字串

4. 字符串替換 REPLACE SECTION [OFFSET off] [LENGTH len] OF dobj WITH new [IN { BYTE | CHARACTER } MODE].

REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] [SUBSTRING] sub_string IN [SECTION [OFFSET off] [LENGTH len] OF ] dobj WITH new [IN {BYTE|CHARACTER} MODE] [{RESPECTING|IGNORING} CASE] [REPLACEMENT COUNT rcnt] [REPLACEMENT OFFSET roff] [REPLACEMENT LENGTH rlen]. eg: DATA: text1 TYPE string VALUE 'xababx'. REPLACE 'ab' IN text1 WITH 'xx'. --> xxxabx

5. 去前導0 (Remove leading zero) SHIFT dobj LEFT DELETING LEADING '0'. FM : CONVERSION_EXIT_ALPHA_OUTPUT

增前導0 (Add leading zero) DATA v_s(5). UNPACK '123' to v_s. ==> v_s = '00123' FM: CONVERSION_EXIT_ALPHA_INPUT

SHIFT dobj [{BY num PLACES} | {UP TO sub_string}] [LEFT|RIGHT] [CIRCULAR] SHIFT dobj {LEFT DELETING LEADING} | {RIGHT DELETING TRAILING} pattern. [IN {BYTE|CHARACTER} MODE].

6. 字符串的長度內表的行數 STRLEN( dobj) 字符串的長度 LINES( itab ) 內表的行數

7. 刪字符串中的空格: CONDENSE text [NO-GAPS].

8. 大小寫轉換,字符變換 TRANSLATE text {TO {UPPER|LOWER} CASE} | {USING pattern}. eg: text = `Barbcbdbarb`. TRANSLATE text USING 'ABBAabba'. =>'Abracadabra'

9. CONVERT CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]] INTO TIME STAMP time_stamp TIME ZONE tz.

CONVERT TIME STAMP time_stamp TIME ZONE tz INTO [DATE dat] [TIME tim] [DAYLIGHT SAVING TIME dst].

CONVERT TEXT text INTO SORTABLE CODE hex.

10. OVERLAY text1 WITH text2 [ONLY pattern]. 若是不指定後面的ONLY pattern, text1中的空格會被text2中的對應字符替代 若是指定只有匹配的字符纔會被替代,注意大小寫敏感

11. 模式匹配 CO / CN contains only or not CA / NA contains any or not any CS / NS contain string or not CP / NP contains pattern or not

NOTE: a) . CO, NO, CA, NA比較時區分大小寫, 而且尾部空格也在比較的範圍以內 data: s1(10) value 'aabb'. if s1 co 'ab' ==> false if s1 co 'ab ' ==>true CS, NS, CP, NP不區分大小寫和尾部空格

b) .對於CP, NP * = \s? + = \s # 換碼字符用於匹配 *, +這樣的字符 ## #* #+ #___ 比較結尾空格 #[a-z] CP, NP中強制區分大小寫

c) . 比較結束後,若是結果爲真,sy-fdpos將給出s2s1中的偏移量信息

12. 特殊字符 在字符串中加入回車換行或TAB字符,在其餘語言能夠使用$13$10這樣的ASCII碼進行插入.但在ABAP中要使用sap的類CL_ABAP_CHAR_UTILITIES. 裏面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.

13. 字符串位操做 DATA: v_s(10) value 'abcd'. v_s+0(1) = 'b'. v_s+2(*) = '12'. => v_s = 'bb12'.

 

轉自 http://blog.sina.com.cn/s/blog_6e19f37f0100xppq.html

-----------------結束---------------------

本文中的內容大多來源於HELP文檔,總結下來,以便在項目中查找參考。。。。。

PS:

比較全部的字段類型    
    <運算符>
    EQ 等於
     = 等於
    NE 等於
    <>  等於
    ><  等於
    LT
    小於
    LE 於等於
    <= 於等於
    GT
    大於
    GE 於等於
    >= 於等於
比較字符串   和數字串    
    <運算符>
    CO 僅包
    CN 不只包含
    CA 含任何
    NA 包含任何
    CS 含字符串
    NS 包含字符串
     CP 包含模
    NP 不包含模式
 
分類:  ABAP, 學習筆記
相關文章
相關標籤/搜索