ABAP 字符串操作


1).SHIFT:截斷字符串
SHIFT {c} [BY {n} PLACES] [{mode}].:
作用:去掉字符串的前n個位置的字符,如果n未指定,默認為1,如果指定的n小於等於0,則字符串不變。如果n超出字符串的長度,則字符串變空,所以在做 此操作的時候要注意n的指定。可以首先獲得該字符串的長度,方法:len=STRLEN(C)。
Mode:指定字符串截斷的方向。
LEFT:從左邊截斷
RIGHT:從右邊截斷
CIRCULAR:把左邊的字符放到右邊。
SHIFT {c} UP TO {str} {mode}.:
作用:把字符串中在str以前的字符都去掉,同樣可以指定mode,原理同上。
SHIFT {c} LEFT DELETING LEADING {str}.
SHIFT {c} RIGHT DELETING TRAILING {str}.:
作用:這兩個語句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
以上語句常用的場合:
A.去掉字符串中的前導字符。例如:如果alv中定一了一個字段是10位的字符,里面放的是so,po等number,而你不想顯示前面的0,那么就可以這樣做:SHIFT {c} LEFT DELETING LEADING 0.
B.已知某個字符串中包含固定的字符,想把這個固定字符前面的字符刪掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某個物料,通過增強mga00002和mga00003對其加了前綴,這個前綴部分是在某固定值表中取得的數據,在具體顯示中,要把其 前綴去掉。如TE-MRP-MAT1中想把te去掉,mrp表示該物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,則可以使用 SHIFT {c} UP TO 'MRP'.
2).REPLACE:替換字符串
REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
作用:把字符串c中的str1替換成str2,如果指定l,就是指定了替換的長度。如果替換成功,則SY-SUBRC設置成0。
常用場合:
字符串的替換操作比較常用,需要注意的是l的指定長度。
3). TRANSLATE:轉換字符串
TRANSLATE {c} TO UPPER CASE.
TRANSLATE {c} TO LOWER CASE.:
作用:字符串的大小寫的轉換
TRANSLATE {c} USING {r}. :
作用:根據規則r轉換字符串c
常用場合:
Sap系統一般都是使用大寫字母的,但是某些特定的字段卻是用小寫字母來標記的,在操作這些字段的時候就需要注意大小寫的轉換了。轉換規則倒是不太常用,到現在我還沒有遇到過。
4). SEARCH:查找字符串
SEARCH {c} FOR {str} {options}.:
作用:在字符串c中查找str,如果找到了,SY-SUBRC為0,SY-FDPOS為找到字符串的具體位置。
需要說明的地方:注意模式的使用
指定str:查找str,str中后面的空格忽略
指定.str.:查找str,包含了str中尾部的空格
指定*str:查找以str結尾的字符串
指定str*:查找以str開頭的字符串
{options}的指定:
主要用到的就是:STARTING AT {n1}指定開始位置
ENDING AT {n2}指定結束位置
常用場合:
一般用來判斷某個字符串是否符合條件。也可以結合其他語句對字符串進行操作。
5).CONDENSE:去掉字符串中的空格
CONDENSE {c} [NO-GAPS].:
作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,則去掉字符串中的所有空格。
常用場合:獲得字符串的精確長度,用於判斷。
6).SPLIT:拆分字符串
SPLIT {c} AT {del} INTO {c1} ... {cn}.
作用:按照分割字符del把字符串c分割成c1…cn。
SPLIT {c} AT {del} INTO TABLE {itab}.
作用:按照分割字符del把c分割,然后放到內表中的相應字段
常用場合:
文件名的分割,根據完整的文件路徑加文件名把文件名分割出來。
難點:無法確定要分割多少次.
解決方法:兩兩分割,到最后的那個就是了。例如:str=c:"dir1"dir2"dir3"file
Split str at '"' into str1 str2.
Find str2 for '/'.
Check sy-subrc = 0.
Do.
Find str2 for '/'.
If sy-subrc = 0.
Split str2 into str1 str2.
Else.
Exit.
Endif.
Enddo.
文件上傳的類型是字符串,把其分割后放到內表中。例如上面的問題:
data: begin of itab occurs 0 ,
col1(30) type c,
end of itab.
Split str at '"' into table itab.
describe table itab lines line.
Read table itab index line.
Itab-col1就是file
7).CONCATENATE:連接字符串
CONCATENATE {c1} ... {cn} INTO {c} [SEPARATED BY {s}].
作用:把c1…cn用s分隔連接到c中

常用場合:文件下載,對文件中的字段編輯。

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

按照給定位置數移動字符串

該語句將字段 <c> 移動 <n> 個位置。如果省略 BY <n> PLACES, 則將<n>解釋為一個位置。如果<n> 是 0 或負值,則<c>保持不變。如果<n>超過<c>長度,則<c>用空格填充 。<n> 可為變量。


對不同(<mode>) 選項,可以按以下方式移動字段 <c>:a.LEFT:向左移動 <n> 位置,右邊用<n>個空格填充(默認設置 )。b.RIGHT:向右移動<n>位置,左邊用<n>個空格填充 。c.CIRCULAR:向左移動 <n> 位置,以便左邊 <n> 個字符出現在右邊。

移動字段串到給定串

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


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

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

假設第一個或最后一個字符符合一定條件,則可用 SHIFT 語句將字段向左或向右移動。為此,請使用以下語法:
SHIFT <c> LEFT DELETING LEADING <str>.
SHIFT <c> RIGHT DELETING TRAILING <str>.
假設左邊的第一個字符或右邊的最后一個字符出現在 <str> 中,該語句將字段 <c> 向左或向右移動。字段右邊或左邊用空格填充。<str> 可為變量。

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是一個表格,從中進行平台相關的文本環境維護。在語句SETLOCALE期間,系統根據TCP0C中的條目設置文本環境。除了內部傳送的平台特性之外,用SET語句指定表關鍵字。如果<lg>等於SPACE,則系統根據用戶主記錄設置文本環境。如果對於指定的關鍵字在表中無條目,則系統將產生運行錯誤。
文本環境影響ABAP/4中依賴於字符集的所有操作。
有關該主題的詳細信息,參見CONVERT TEXT和SET LOCALE LANGUAGE 的關鍵字文檔。
關於如何根據語言排序的示例,參見內表排序。

10) 覆蓋字符字段
要用另一字符字段覆蓋字符字段,請使用OVERLAY語句,用法如下:
語法
OVERLAY <c1> WITH <c2> [ONLY <str>].
該語句用<c2>的內容覆蓋字段<c1>中包含<str>中字母的所有位置。<c2>保持不變。如果省略ONLY<str>,則覆蓋字段<c1>中所有包含空格的位置。
如果至少要替換<c1>中的一個字符,則將SY-SUBRC設置為0。對於所有其它情況,將SY-SUBRC設置為4。如果<c1>比<c2>長,則只覆蓋<c2>中的長度。

11) 獲得字符串長度
要決定字符串到最后一個字符而不是SPACE的長度,請使用內部函數STRLEN,用法如下:
語法
[COMPUTE] <n> = STRLEN( <c> ).
STRLEN將操作數<c>作為字符數據類型處理,而不考慮其實際類型。不進行轉換。

12) 分配字符串部分
MOVE語句的以下變體只使用類型C字段:
語法
MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].
將左對齊的字符字段<c1>的百分比<p>(或如果用RIGHT選項指定,則為右對齊)復制到<c2>。
<p>值可為0和100之間的任何數。將要從<f1>復制的長度取整為下一個整數。
如果語句中某一參數不是類型C,則忽略參數PERCENTAGE。
DATA C1(10) VALUE 'ABCDEFGHIJ',
C2(10).
MOVE C1 TO C2 PERCENTAGE 40.
WRITE C2.
MOVE C1 TO C2 PERCENTAGE 40 RIGHT.
WRITE / C2.
該過程的輸 出如下:
ABCD
ABCD

 


免責聲明!

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



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