ABAP語法基礎篇(5)——字符串處理


五、字符串

5.1 移動字符串

5.1 .1 按給定位置數移動字符串

要按給定位置數移動字 段內容, 使用 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> 個字符出現在右邊。

5.1.2 移動字符串到給定串位置

要移動字段內容以到給定串位置 ,則使用 SHIFT 語句,用法如下:

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

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

如果 <c> 中找不到 <str> ,則將 SY-SUBRC 設置為 4 並且不移動 <c> 。否則,將 SY-SUBRC 設置為 0 。

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

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

SHIFT <c>LEFT DELETING LEADING <str>.

SHIFT <c> RIGHT DELETING TRAILING <str>.

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

5.2 替換字段內容

要用其它字符串替換字段串的某些部分, 使用 REPLACE 語句。

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> 可為變量。

5.3 大小寫轉換 並替換字符串

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

TRANSLATE <c> TO UPPER CASE.

TRANSLATE <c> TO LOWER CASE.

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

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

TRANSLATE <c> USING <r>.

該語句根據字段 <r> 中存儲的替換規則替換字段 <c> 的所有字符。 <r> 包含成對字母,其中每對的第一個字母用第二個字母替換。 <r> 可為變量。

5.4 轉換為可排序格式

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

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

該語句為字符字段 <c> 填充可排序目標字段 <sc> 。字段 <c> 必須是類型 C 且字段 <sc> 必須是類型 X ,最小長度為 <c> 長度的 16 倍。
該語句目的是為字符字段 <c> 創建相關字段 <sc> ,作為 <c> 的按字母順序排列的排序關鍵字。在內表的內容和已解壓縮的數據中進行排序。

如果對未轉換的字符字段進行排序,則系統創建與各字母的特定平台內部編碼相對應的順序。在對目標字段進行排序之后,轉換 CONVERT TEXT 按這樣的方式創建目標字段,相應的字符字段順序按字母排序。例如,在德語中,順序為Miller 、 Moller 、 Mller 、 Muller ,而不是 Miller 、 Moller 、 Muller 、 Mller

轉換方法依賴於運行 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 中依賴於字符集的所有操作。

5.5 覆蓋字符字段

要用另一字符字段覆蓋字符字段,使用 OVERLAY 語句,用法如下:

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

該語句用 <c2> 的內容覆蓋字段 <c1> 中包含 <str> 中字母的所有位置。 <c2> 保持不變。如果省略 ONLY <str> ,則覆蓋字段 <c1> 中所有包含空格的位置。

如果至少要替換 <c1> 中的一個字符,則將 SY-SUBRC 設置為 0。對於所有其它情況,將 SY-SUBRC 設置為 4 。如果 <c1><c2> 長,則只覆蓋 <c2> 中的長度。

5.6 搜索字符串

要搜索特定模式的字符串,請使用 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> 開始的詞

單詞之間用空格、逗號、句號、分號、冒號、問號、嘆號、括號、斜杠、加號和等號等分隔。
搜索字符字段 <c> 的各種選項<options>如下:

  • ABBREVIATED

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

  • STARTING AT <n1>

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

  • ENDING AT <n2>

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

  • AND MARK

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

5.7 獲得字符串長度

要決定字符串到最后一個字符而不是 SPACE 的長度, 使用內部函數 STRLEN ,用法如下:

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

STRLEN 將操作數 <c> 作為字符數據類型處理,而不考慮其實際類型,不進行轉換。關鍵字 COMPUTE 可選。

5.8 壓縮字符串去空格

要刪除字符字段中多余 空格,使用 CONDENSE 語句,用法如下:

CONDENSE <c> [NO-GAPS].

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

5.9 連接字符串

要將單個字符串連接成一體, 使用 CONCATENATE 語句,用法如下:

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

該語句連接字符串 <c1><cn> 並將結果賦給 <c>

該操作忽略尾部空格,附加 SEPARATED BY <s> 允許指定字符字段 <s>,它放置在單個字段間已定義的長度中。
如果結果符合 <c> ,則將 SY-SUBRC 設置為 0 。然而,如果結果必須被截斷,則將 SY-SUBRC 設置為 4 。

5.10 拆分字符串

要將字符串拆分成兩個或更多小串 , 使用 SPLIT 語句,用法如下:

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

該語句在字符字段 <c> 搜索分界字符串 <del> ,並將分界符之前和之后的部分放到目標字段 <c1> ... <cn> 中。

要將所有部分放到不同目標字段中,必須指定足夠目標字段。否則,用字段 <c> 的剩余部分填充最后目標字段並包含分界符。

如果所有目標字段足夠長且不必截斷任何部分,則將 SY-SUBRC 設置為 0 ,否則,將其設置為 4 。

5.11 分配字符串部分

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

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

將左對齊的字符字段 <c1> 的百分比 <p> (或如果用 RIGHT 選項指定,則為右對齊)復制到 <c2>

<p> 值可為 0100 之間的任何數。將要從 <f1> 復制的長度取整為下一個整數。

如果語句中某一參數不是類型 C ,則忽略參數 PERCENTAGE


免責聲明!

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



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