SAP:ABAP基礎篇--字串擷取
字串擷取的多種方式,筆記
1. 數字型別(numeric types)
(1).型別
Abap支援三種數字型別:
I:整型
範圍:-2147483648 to 2147483647
P:16位
範圍:取決於小數位的長度
注意事項:為了確保計算正確,必須在程式屬性中把fixed point arithmetic選中,參考圖1。
F:浮點型別
範圍:+/- 2.2250738585072014E-308 to 1.7976931348623157E+308
注意事項:因為長度的關係,所以儘量不要用兩個該型別的資料相等作為判斷條件
(2).定義方法
[f1] type I.
[f1] type P decimals [num].
[f1] type F.
(3).使用
I型別:
主要是用於計數器,數量,索引,偏移量等等
例如:愛ERP網
*取得內錶行數
DATA: V_COUNTER TYPE I.
V_COUNTER = LINES( I_TAB ).
*根據索引讀取內表中的資料
DATA: V_INDEX TYPE I.
READ TABLE I_TAB INDEX V_INDEX.
*擷取字串
DATA: V_OFFSET_START TYPE I,
V_OFFSET_LENGTH TYPE I,
V_C(10) TYPE C,
L_C(3) TYPE C.
V_C = ‘ABCDEFGHIJ’.
V_OFFSET_START = 3.
V_OFFSET_LENGTH = 5
L_C = V_C+V_OFFSET_START(V_OFFSET_LENGTH).
RESULT:
L_C = ‘DEFGH’.
P型別:
主要和資料庫中的QUAN型別關聯;
常用場合:大小,長度,重量,貨幣等有單位的場合
*根據單位把數量寫入字元型變數中
WRITE:[數量] to [字元型變數] unit [單位].
F型別:
常用場合:計算
字元型別:
一.包括:
C:字元
N:應該算是字元型的數字
D:日期型別,標準長度8(YYYYMMDD),注意其初期值的判斷,不是space,而是'00000000',判斷語句可以使用is initial or not。
T:時間型別,標準長度6(HHMMSS)
二.具體使用:愛ERP網
1.對字串的操作
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'.