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> 可为变量。