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


1, 替換字段內容REPLACE

語法:

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

代碼:

DATA: T(10) VALUE 'abcdefghij',
      STRING LIKE T,
      STR1(4) VALUE 'cdef',
      STR2(4) VALUE 'klmn',
      STR3(2) VALUE 'kl',
      STR4(6) VALUE 'klmnop',
      LEN TYPE I VALUE 2.
STRING = T.
WRITE STRING.
REPLACE STR1 WITH STR2 INTO STRING.
WRITE / STRING.
STRING = T.
REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.
WRITE / STRING.
STRING = T.
REPLACE STR1 WITH STR3 INTO STRING.
WRITE / STRING.
STRING = T.
REPLACE STR1 WITH STR4 INTO STRING.
WRITE / STRING.

結果顯示:

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

2, 轉換大/小寫並替換字符TRANSLATE

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

語法

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

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

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

語法

TRANSLATE <c> USING <r>.

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

代碼:

DATA: T(10) VALUE 'AbCdEfGhIj',
      STRING LIKE T,
      RULE(20) VALUE 'AxbXCydYEzfZ'.
STRING = T.
WRITE STRING.
TRANSLATE STRING TO UPPER CASE.
WRITE / STRING.
STRING = T.
TRANSLATE STRING TO LOWER CASE.
WRITE / STRING.
STRING = T.
TRANSLATE STRING USING RULE.
WRITE / STRING.

顯示結果:

3, 轉換為可排序格式CONVERT TEXT

可以將字符 字段轉換為 可按字母順 序排列的格 式:

語法:

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 中依賴於字 符集的所有 操作。

4, 移動字段內容SHIFT

按給定位置 數移動字段串

要按給定位 置數移動字 段內容,請 使用 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> 個字符出現 在右邊。
    DATA: T(10) VALUE 'abcdefghij',
          STRING LIKE T.
    STRING = T.
    WRITE STRING.
    SHIFT STRING.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING BY 3 PLACES LEFT.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING BY 3 PLACES RIGHT.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING BY 3 PLACES CIRCULAR.
    WRITE / STRING.

    顯示結果:

    移動字段串 到給定串

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

    語法:

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

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

    DATA: T(10) VALUE 'abcdefghij',
          STRING LIKE T,
          STR(2) VALUE 'ef'.
    STRING = T.
    WRITE STRING.
    SHIFT STRING UP TO STR.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING UP TO STR LEFT.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING  UP TO STR RIGHT.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING  UP TO STR CIRCULAR.
    WRITE / STRING.

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

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

    語法

    SHIFT <c> LEFT  DELETING LEADING  <str>.
    
    SHIFT <c> RIGHT DELETING TRAILING <str>.

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

    代碼:

    DATA: T(14) VALUE '    abcdefghij',
          STRING LIKE T,
          STR(6) VALUE 'ghijkl'.
    STRING = T.
    WRITE STRING.
    SHIFT STRING LEFT DELETING LEADING SPACE.
    WRITE / STRING.
    STRING = T.
    SHIFT STRING RIGHT DELETING TRAILING STR.
    WRITE / STRING.

    顯示結果:

    5, MOVE TO 分配字符串部分

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

    語法:

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

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

    DATA:  c1(10) TYPE c VALUE 'ABCDEFGHIJ',
           c2(10) TYPE c.
    MOVE c1 TO c2 PERCENTAGE 40.
    WRITE c2.
    MOVE c1 TO c2 PERCENTAGE 40 RIGHT.
    WRITE / c2.

    6, 比較字符串

    要比較字符 串(類型 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> 中的偏移量 。

    例子:

    下表列出該 程序的執行 結果,取決 於所用的運 算符和 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

    以上。


免責聲明!

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



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