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
以上。