.P
又称为压缩类型.
值范围1~15整型数字(除去最后的符号位).
若在没有定义长度的情况下,默认为最大长度,即15.
点号不算在表示位数内,但表示位数过长的情况下,点号会自动消除,如:12,345; 1234567,890,123
小数点可表示最大位数14.小数点部分按四舍五入法取值.
.DEC
金额类型.
与类型P的转换公式为:P((n+1)/2)
与之相关的常用的domain有
DEC15(15位的小数点项目)
金额加算等需要注意溢出(CX_SY_ARITHMETIC_OVERFLOW)
.F
如: f = 1000000. WRITE f EXPONENT 2.⇒10000.000000000000E+02
● 演算符
+
-
*
/
DIV
MOD
**
Ø
例:
1 MOD -5 ⇒1
①
②
上例可以看出取模运算的商是两数可除尽的最小整数值.如:25/7⇒3(余4) -25/7⇒-4(余3)
※可除尽的最小整数值的符号与除数符号一致(-25/-7⇒-4(余3))
③
④
● 常用函数
例
abs(n)
sign(n)
ceil(n)
floor(n)
trunc(n)
frac(n)
strlen(str)
lines(arg)
● 逻辑运算符
Ø
=
<>
<
>
<=
>=
Ø
例:f1 逻辑式f2
CO
CN
CA
NA
CS
NS
CP
NP
※1.CO中要注意f1的右侧空格是作为一个文字来进行处理的,看下面的代码
DATA: str1(10) TYPE c VALUE 'abc',
if str1 cp str2.
else.
endif.
运行结果为'×',原因就在于str1的右侧还包含了7个space,而str2中没有space字符。
2. CP中可以使用正则表达式,*,+,转意符#
● 数据处理
Ø
例:
²
ultimo
ultimo+6(2) = '01'.
ultimo
²
DATA: t1 TYPE t VALUE '200000',
diff
seconds = diff MOD 86400.
hours
Ø
²
根据指定文字数向左向右移动,根据指定子字符串的值向左向右移动,删除指定子字符串的值等
²
对字符串进行置换
²
对字符串大小写转换及一些简单置换
²
将第一个字符串内容置换成相同位置的第二个字符串的内容
²
计算字符串的长度(字符串的右space不算在字符串长度内)
²
去除space
²
字符串连接
²
字符串分割
²
取子字符串
● 内表
Ø
标准内表,通过索引对表进行访问,所属index table
Ø
所属index table。有索引。
可以设置主键,也可不设。
设置主键后,在行插入(insert)时,可根据主键自动排序。
(但在行追加(append)时,如果追加行的主键值大于内表中最后一条记录的主键值时,会有执行错误发生)
另外,在行检索(read itab from stru)时,可以根据stru中的主键值(主键值以外的项目值被无视)进行检索。
关于主键唯一性的设置 NON-UNIQUE:主键值不唯一/UNIQUE:主键唯一
Ø
哈希内表。
无索引。所以所有关于使用index操作表的语句都不可使用。
必须设置主键。
● 内表操作
Ø
APPEND
INSERT
COLLECT
Ø
MODIFY
所以不建议无主键的内表使用,如STANDARD TABLE。即便使用了,更新的内容也非预期所想的。一般情况下更新内表中的第一条数据。
更新时,若检索主键值存在的情况下,根据检索主键更新。若主键值不存在,则不进行更新,结果返回4
Ø
DELETE
WITH TABLE KEY col1 = 3.
在使用重复值删除(ADJACENT DUPLICATES FROM)的时候要注意,重复值指的是相临的几条数据之间的重复值比较,而非整个内表中的所有记录。所以在使用重复值删除时,最好先根据比较key排一下序。
Ø
READ
LOOP AT
-at new compN:在项目comp1~compN值变化的第一条数据时执行
用。求和结果放在循环领域的同名项目中。SUM求和比较复杂,也不易操作,如同一内表需要对不同的GROUP进行求和的场合,由于1.的原因需要创建与该内表项目名相同但次序不同的多个结构。建议使用COLLECT。
Ø
SORT