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