截取字符串
DATA : zchar(12) TYPE c VALUE '00AABBCCDD00', zcharstu(2) TYPE c VALUE 'DD', len TYPE n LENGTH 2. len = STRLEN( zchar ). "获取字符串长度,如果LENGTH长度不够,则从右边开始取,有几位取几位 zchar = '00AABBCCDD00'. SHIFT zchar. "去掉左边第一位 *语法 : SHIFT {c} [BY {n} PLACES] [{mode}]. *c: 字符串 *n: 去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空 *Mode:指定字符串截断的方向。 LEFT:从左边截断 RIGHT:从右边截断 zchar = '00AABBCCDD00'. SHIFT zchar BY 3 PLACES RIGHT. "去掉右边三位 *语法:SHIFT {c} UP TO {str} {mode} 把字符串中在str以前的字符都去掉,同样可以指定mode zchar = '00AABBCCDD00'. SHIFT zchar UP TO zcharstu RIGHT. "去掉指定字符串zcharstu右边的字符 输出00AABBCCDD zchar = '00AABBCCDD00'. SHIFT zchar UP TO zcharstu LEFT. "去掉指定字符串zcharstu左边的字符 输出DD00
*这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
zchar = '00AABBCCDD00'.
SHIFT zchar LEFT DELETING LEADING zcharstu. "只能去掉最左边的字符,如果zcharstu是中间或者右边而不是最左边则无法删除
zchar = '00AABBCCDD00'.
SHIFT zchar RIGHT DELETING TRAILING zcharstu. "只能去掉最右边的字符,如果zcharstu是中间或者左边而不是最右边则无法删除
以上语句常用的场合:
A.去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:
SHIFT {c} LEFT DELETING LEADING 0.
B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:
SHIFT {c} UP TO {str}。
拓展:
也可以采用字符串+x(y)的方式 : x表示从x开始,y表示截取y个字符.
例如: sy-datum+0(4) 输出年份