截取字符串
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) 輸出年份