ABAP基础-06 基本数据操作

ABAP-06 基本数据操作

1、数据赋值

1.1 举例1

* 简单例子
DATA: str1 TYPE c,
      str2 TYPE c.

str1 = '1'.
str2 = '2'.

WRITE: str1,/." 输出:1

str1 = str2.
WRITE:str1,/." 输出:2

1.2 举例2

* 情景2.
TYPES:BEGIN OF s1,
  a(10) TYPE c,
  b(1) TYPE c,
  END OF s1.

TYPES:BEGIN OF s2,
  a(10) TYPE c,
  b(2) TYPE c,
  age TYPE i,
  END OF s2.

DATA:str3 TYPE s1,
      str4 TYPE s2.

str4-a = 'AAA'.
str4-b = 'BC'.

str3 = str4.
WRITE:'str3=',str3-a."输出:AAA。
WRITE:/.
WRITE:'str3=',str3-b."输出:B   会少一个C,因为str3的b元素长度不够自动截取。

1.3 举例3

会报错,需要用:MOVE-CORRESPONDING str6 to str5.

* 情景3.
TYPES:BEGIN OF s3,
  a(10) TYPE c,
  b(1) TYPE c,
  c TYPE i,
  END OF s3.

  TYPES:BEGIN OF s4,
  a(10) TYPE c,
  b(2) TYPE c,
  age TYPE i,
  END OF s4.

  DATA:str5 TYPE s3,
      str6 TYPE s4.

str6-a = 'AAA'.
str6-b = 'BC'.

str5 = str6." 此处会报错,因str5和str6结构不一致。
WRITE:str5-a.

更改后代码如下,新增了:MOVE-CORRESPONDING str6 to str5.

* 情景3.
TYPES:BEGIN OF s3,
  a(10) TYPE c,
  b(1) TYPE c,
  c TYPE i,
  END OF s3.

  TYPES:BEGIN OF s4,
  a(10) TYPE c,
  b(2) TYPE c,
  age TYPE i,
  END OF s4.

  DATA:str5 TYPE s3,
      str6 TYPE s4.

str6-a = 'AAA'.
str6-b = 'BC'.

*str5 = str6." 此处会报错,因str5和str6结构不一致。
MOVE-CORRESPONDING str6 to str5."只赋值相同部分,避免报错。

WRITE:str5-a.

2、数值运算

运算数学表达式
n = x + y
n = x - y
n = x * y
n = x / y
整除n = x div y
取余n = x mod y
幂(乘方)n = x ** y

3、逻辑表达式

运算符说明
EQ 或 =等于
NE 或 <> 或 ><不等于
LT 或 <小于
LE 或 <=小于等于
GT 或 >大于
GE 或 >=大于等于

4、类型转换

4.1 D和T之间不能转换,其它类型之间可以转换

4.2 数据转换规则

类型目标类型转换规则
CC左对齐目标字段中的数据,如果字段太长,则用空格从右边开始进行填充,如果太短,则在右边将其内容截断
CD源字段应包含格式为YYYYMMDD的8个数字字符日期
CF源字段内容必须是类型F字段的有效表示
CN只复制源字段中的数字。如长度不同,字段右边被截断,左边用零填充
CI或P源字段必须包含是数字类型的有效格式,即一个可以有前导符号的数字序列,最多包含一个小数点,并可包含空格。如果目标字段太短,则产生溢出,这可能会中断程序的运行
CT源字段应包含格式为HHMMSS的6个数字字符时间
CX源字段应包含十六进制字符串格式,有效字符为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F。该字符串被视为十六进制数,左对齐传送,并且右边用零填充或截断
DC未转换,左对齐传送
DD未转换传送
DF先将源字段转换为一个压缩数(P类型过渡数据),然后将该压缩数转换为F类型字段(参见P→F转换规则)
DN先将源字段转换为字符数据(C类型过渡数据),然后将该数据转换为N类型字段(参见C→N转换规则)
DI或P转换为从公元0001年1月1日开始的天数
DT不支持该类型间转换,将导致语法检查错误信息或运行时错误
DX转换为以十六进制数表示的从公元0001年1月1日开始的天数
FC先将源字段转换为E的格式,然后传送给C类型字段。如果尾数不是零,则尾数值介于1和10之间,指数总是带符号的。如果目标字段太短,则尾数被取整,目标字段长度至少应为6字节
FD先将源字段转换为一个压缩数,然后将P类型数据转换为D类型字段(参见P→D转换规则)
FF未转换传送
FN先将源字段转换为一个压缩数,然后将该压缩数转换为N类型字段(参见P→N转换规则)
FI或P将浮点数F转换为整数(I类型字段)或定点数(P类型字段),并在必要时取整
FT先将源字段转换为一个压缩数,然后将该压缩数转换为T类型字段(参见P→T转换规则)
FX先将源字段转换为一个压缩数,然后将该压缩数转换为X类型字段(参见P→X转换规则)
NC看作C类型字段处理并保留前导零
ND先转换为字符数据,然后将该字符数据转换为D类型字段(参见相关表)
NF先将数值字段转换为一个压缩数,然后将该压缩数转换为F类型字段(参见P→F转换规则)
NN右对齐传送,并在左边用零填充或截断
NI或P将源字段视为数字,右对齐带负号传送,如果目标字段太短,则程序可能终止
NT先转换为字符字段,然后将该字符字段转换为T类型字段(参见C→T转换规则)
NX先将数值字段转换为一个压缩数,然后将该压缩数转换为X类型字段(参见P→X转换规则)
PC如果需要小数点(参见程序属性设定),则右对齐传送给目标字段,并保留首位作为符号位,前导零以空格出现。如果目标字段太短,对于正数则可省略符号位,如果仍不够,则在左边截断该字段,并用星号*标识截断。如果要在目标字段中出现前导零,则应使用UNPACK语句代替MOVE语句进行赋值
PD源字段的值代表从公元0001年1月1日起的天数,并转换为YYYYMMDD的日期格式
PF作为F类型数据接受被传送
PN如必要,则先将源字段取整,解压缩,然后右对齐传送,并省略符号位。如果目标字段较短,是左边用零填充
PI或P右对齐传送,如果目标字段过短,则产生溢出
PT源字段的值代表从午夜(零点零分零秒)起的秒数并转换为HHMMSS的时间格式
PX如必要,则先将源字段取整,然后将其转换为十六进制数。用2的补数表示负数。如果目标字段太短,则在左边进行截断
TC未转换,左对齐传送
TD不支持该类型间转换,将导致语法检查错误信息或运行时错误
TF先转换为一个压缩数,然后将该压缩数转换为F类型字段(参见P→F转换规则)
TN先转换为字符数据,然后将该字符数据转换为N类型字段(参见C→N转换规则)
TI或P转换为从午夜起的秒数
TT未转换传送
TX转换为十六进制格式的从午夜起的秒数
XC将源字段中的值转换为十六进制字符串,左对齐传送给目标字段,并用零填充
XD源字段的值代表从公元0001年1月1日起的天数,并转换为YYYYMMDD的日期格式
XF先将源字段转换为一个压缩数,然后将该压缩数转换为F类型字段(参见P→F转换规则)
XN先将源字段转换为一个压缩数,然后将该压缩数转换为N类型字段(参见P→N转换规则)
XI或P将源字段的值解释为十六进制数,并转换为压缩的十进制数,右对齐传送给目标字段。如果源字段长于4字节,只转换后4个字节。如果太短,则产生运行时错误
XT源字段的值代表从午夜起的秒数并转换为HHMMSS的时间格式
XX左对齐传送,如有必要,右边用X’00’进行填充
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值