日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABAP 字符串操作

發(fā)布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP 字符串操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1).SHIFT:截?cái)嘧址?br />SHIFT {c} [BY {n} PLACES] [{mode}].:
作用:去掉字符串的前n個位置的字符,如果n未指定,默認(rèn)為1,如果指定的n小于等于0,則字符串不變。如果n超出字符串的長度,則字符串變空,所以在做 此操作的時候要注意n的指定。可以首先獲得該字符串的長度,方法:len=STRLEN(C)。
Mode:指定字符串截?cái)嗟姆较颉?br />LEFT:從左邊截?cái)?br />RIGHT:從右邊截?cái)?br />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.去掉字符串中的前導(dǎo)字符。例如:如果alv中定一了一個字段是10位的字符,里面放的是so,po等number,而你不想顯示前面的0,那么就可以這樣做:SHIFT {c} LEFT DELETING LEADING 0.
B.已知某個字符串中包含固定的字符,想把這個固定字符前面的字符刪掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某個物料,通過增強(qiáng)mga00002和mga00003對其加了前綴,這個前綴部分是在某固定值表中取得的數(shù)據(jù),在具體顯示中,要把其 前綴去掉。如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設(shè)置成0。
常用場合:
字符串的替換操作比較常用,需要注意的是l的指定長度。
3). TRANSLATE:轉(zhuǎn)換字符串
TRANSLATE {c} TO UPPER CASE.
TRANSLATE {c} TO LOWER CASE.:
作用:字符串的大小寫的轉(zhuǎn)換
TRANSLATE {c} USING {r}. :
作用:根據(jù)規(guī)則r轉(zhuǎn)換字符串c
常用場合:
Sap系統(tǒng)一般都是使用大寫字母的,但是某些特定的字段卻是用小寫字母來標(biāo)記的,在操作這些字段的時候就需要注意大小寫的轉(zhuǎn)換了。轉(zhuǎn)換規(guī)則倒是不太常用,到現(xiàn)在我還沒有遇到過。
4). SEARCH:查找字符串
SEARCH {c} FOR {str} {options}.:
作用:在字符串c中查找str,如果找到了,SY-SUBRC為0,SY-FDPOS為找到字符串的具體位置。
需要說明的地方:注意模式的使用
指定str:查找str,str中后面的空格忽略
指定.str.:查找str,包含了str中尾部的空格
指定*str:查找以str結(jié)尾的字符串
指定str*:查找以str開頭的字符串
{options}的指定:
主要用到的就是:STARTING AT {n1}指定開始位置
ENDING AT {n2}指定結(jié)束位置
常用場合:
一般用來判斷某個字符串是否符合條件。也可以結(jié)合其他語句對字符串進(jìn)行操作。
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分割,然后放到內(nèi)表中的相應(yīng)字段
常用場合:
文件名的分割,根據(jù)完整的文件路徑加文件名把文件名分割出來。
難點(diǎn):無法確定要分割多少次.
解決方法:兩兩分割,到最后的那個就是了。例如: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.
文件上傳的類型是字符串,把其分割后放到內(nèi)表中。例如上面的問題:
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>].

按照給定位置數(shù)移動字符串

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


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

移動字段串到給定串

SHIFT <c> UP TO <str> <mode>.
ABAP/4 查找<c>字段內(nèi)容直到找到字符串 <str> 并將字段<c> 移動到字段邊緣。 <mode> 選項(xiàng)與按給定位置數(shù)移動字段串中所述相同。<str> 可為變量。


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

根據(jù)第一個或最后一個字符移動字段串

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

9).轉(zhuǎn)換為可排序格式

可以將字符字段轉(zhuǎn)換為可按字母順序排列的格式:
語法
CONVERT TEXT <c> INTO SORTABLE CODE <sc>.
該語句為字 符字段 <c> 填充可排序 目標(biāo)字段 <sc>。 字段 <c> 必須是類型 C且字段 <sc> 必須是類型 X ,最小長度 為 <c> 長度的16倍 。
該語句目的是為字符字段<c>創(chuàng)建相關(guān)字段<sc>,作為<c>的按字母順序排列的排序關(guān)鍵字。在內(nèi)表的內(nèi)容和已解壓縮的數(shù)據(jù)中進(jìn)行排序(參見內(nèi)表排序和給摘錄數(shù)據(jù)集排序)。
如果對未轉(zhuǎn)換的字符字段進(jìn)行排序,則系統(tǒng)創(chuàng)建與各字母的特定平臺內(nèi)部編碼相對應(yīng)的順序。在對目標(biāo)字段進(jìn)行排序之后,轉(zhuǎn)換CONVERT TEXT 按這樣的方式創(chuàng)建目標(biāo)字段,相應(yīng)的字符字段順序按字母排序。例如,在德語中,順序?yàn)椤甅iller、Moller、M?ller、Muller’,而不是‘Miller、Moller、
Muller、M?ller’。
轉(zhuǎn)換方法依賴于運(yùn)行ABAP/4程序的文本環(huán)境。文本環(huán)境在用戶主記錄中定義。例外的是可以使用如下語句,在程序中設(shè)置文本環(huán)境:
語法
SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>].
該語句根據(jù)語言<lg>設(shè)置文本環(huán)境。對于選項(xiàng)COUNTRY,只要特定國家語言不同,就可以在語言以外指定國家。對于選項(xiàng)MODIFIER,只要一個國
家內(nèi)語言不同,就可以指定另一個標(biāo)識符,例如,排序順序在電話簿和詞典之間不同。
字段<lg>、<cy>和<m>必須是類型C且長度必須與表TCP0C的關(guān)鍵字段長度相等。表TCP0C是一個表格,從中進(jìn)行平臺相關(guān)的文本環(huán)境維護(hù)。在語句SETLOCALE期間,系統(tǒng)根據(jù)TCP0C中的條目設(shè)置文本環(huán)境。除了內(nèi)部傳送的平臺特性之外,用SET語句指定表關(guān)鍵字。如果<lg>等于SPACE,則系統(tǒng)根據(jù)用戶主記錄設(shè)置文本環(huán)境。如果對于指定的關(guān)鍵字在表中無條目,則系統(tǒng)將產(chǎn)生運(yùn)行錯誤。
文本環(huán)境影響ABAP/4中依賴于字符集的所有操作。
有關(guān)該主題的詳細(xì)信息,參見CONVERT TEXT和SET LOCALE LANGUAGE 的關(guān)鍵字文檔。
關(guān)于如何根據(jù)語言排序的示例,參見內(nèi)表排序。

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

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

12) 分配字符串部分
MOVE語句的以下變體只使用類型C字段:
語法
MOVE <c1> TO <c2> PERCENTAGE <p> [RIGHT].
將左對齊的字符字段<c1>的百分比<p>(或如果用RIGHT選項(xiàng)指定,則為右對齊)復(fù)制到<c2>。
<p>值可為0和100之間的任何數(shù)。將要從<f1>復(fù)制的長度取整為下一個整數(shù)。
如果語句中某一參數(shù)不是類型C,則忽略參數(shù)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

總結(jié)

以上是生活随笔為你收集整理的ABAP 字符串操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。