五、字符串
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>
值可為 0
和 100
之間的任何數。將要從 <f1>
復制的長度取整為下一個整數。
如果語句中某一參數不是類型 C
,則忽略參數 PERCENTAGE
。