数据类型与数据对象的区别
1、数据类型:是对数据对象的技术特性定义;本身不占用内存空间;可以是系统预定义类型或用户自定义。
2、数据对象:真实的对象,占用内存空间,内存变量;指定为某一特定数据。
数据类型:常用预定义数据类型
类型缩写 | 类型 | 默认长度 | 允许长度 | 初始值 | 描述 |
---|---|---|---|---|---|
C | 文本型 | 1 | 空 | 字符串数据,如‘world’ | |
D | 日期型 | 8 | 8 | ‘00000000’ | 日期数据,YYYYMMDD |
F | 浮点型 | 8 | 8 | 0 | 浮点数 |
I | 整型 | 4 | 10 | 0 | 带正负号的整数 |
N | 数值 | 1 | 31 | ‘00....000’ | 数值组成的字符串 |
P | 压缩型 | 8 | 16 | 0 | 将两个十进制数字压缩到一个字节 |
T | 时间型 | 6 | 6 | ‘000000’ | 时间 |
默认的数据类型是CHAR。
取值是默认C型从左取,N从右取,超过定义长度截断。
C类型可以赋数值、字符、混合,如果是全数值,相当于N型。
日期和时间型可进行加减乘除运算。
P型小数点要使用DECIMAL声明,如DECIMAL 2,两位小数。
数据类型:自定义数据类型
1、用字典定义,全局数据类型,全局数据类型还包括预定义数据类型。
2、用types声明局部数据类型,在程序中用于声明常量或变量,types定义的是类型,不是变量,所以不能直接赋值。
第一种是结构数据类型,第二是文本型。
实例:
TYPES:BEGIN OF EMPLOYEE,
CODE(10) TYPE C,
NAME(10) TYPE C,
END OF EMPLOYEE.
TYPES:ADDRESS(50) TYPE C.
数据对象:
1、用DATA定义数据对象
语法:DATA [<length>] type <type> [value <value>] [decimal <decimal>]
其中:【】里的内容表示可选,<>表示名称。
<name>:变量名称,最长30个字符,不可含有 + 。等字符。
<length>:长度
<type>:数据类型
<value>:初始值
<decimal>:小数位
2、TYPE和LIKE
变量定义也可以用关键字LIKE。
语法:DATA <name> [<length] like <object> | <type> [ value <value> [decimal <decimals>]
TYPE与LIKE的区别:
LIKE用在已有的数据类型,如系统变量,而type则是用在定义数据类型。
DATA: TRAN LIKE SY-DATUM.
系统变量在结构SYST中可查看所有系统变量。
3、常量定义使用CONSTANTS
语法:CONSTANTS <常量名> [<长度>] TYPE <数据类型> VALUE <默认值>
常量一旦被定义,即被长期保存在内存,其值无法改变。
4、常用的系统变量
SY-SUBRC
SY-UNAME
SY-DATUM
SY-UXEIT
SY-TCODE
SY-INDEX
SY-TABIX
SY-MANDT
SY-VLINE:
SY-ULINE:
5、结构体定义:
有结构的变量,程序中用DATA定义的局部变量
语法:
(1)DATA:BEGIN OF <name>,
SID(10) TYPE C,
NAME(20) TYPE C,
END OF USERINF.
(2)DATA USER2 LIKE USERINF.
6、结构体赋值
可对结构体直接赋值;相同的结构体之间可以直接等号赋值,实现数据的复制;
write structure name可输出所有字段,<STRUCTURE>-<FIELD NAME>输出指定字段,相同结构体之间使用Move .... TO .... 进行复制;有差异的结构体使用MOVE-CORRESSPONDING匹配及赋值相同的字段。
7、结构体继承
参考已存在的结构体创建一个属性相同的新结构体;可以在新结构体中增加字段
定义语句:INCLUDE STRUCTURE。
实例:
DATA:BEGIN OF EMPLOYE,
INCLUDE STRUCTURE USERINF,
DATA:BIRTHDATE TYPE D,
ADD(50)TYPE C,
END OF EMPLOYEE。
MOVE-CORRESSPONDING USERINF TO USERDETAIL.
8、赋值
(1)MOVE <F1> TO <F2>.
(2)WRITE <value> TO <Field>.带有格式的复制。
偏移量赋值:F2 =F1 + 3(5),3:偏移量,5:取数位
MOVE <F1> [+<偏移量>][<取位数>] TO <F2>[+<偏移量>][<取位数>].
WRITE <F1> [+<偏移量>][<取位数>] TO <F2>[+<偏移量>][<取位数>].
<F1> [+<偏移量>][<取位数>] = <F2>[+<偏移量>][<取位数>].
9、指针
通过指针赋值
语法:FIELD-SYMBOLS <FS>.
ASSIGN <VALUE> TO <FIELD>.
(1)可以不指定参考类型,用语句assign来分配给它变量。
(2)<fs>并不是变量,存放的是变量的地址,而非变量本身。
(3)如果修改
10、数据处理
(1)类型转换
在不同类型的数对象之间赋值,会自动进行类型转换,转换过程遵循固定规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略,C不能直接赋值给I,需要C->N->I;可以使用MOVE TO 或write TO语句。
(2)算数运算符
加减乘除,DIV整数除法,MOD余数除法。 运算符合变量间要有空格。
(3)比较运算符:
= EQ;<> >< NE ;< LT; <= LE;
(4)算数运算函数
11、字符串移位
语法:SHIFT <c> [BY <n> PLACES ] [<modes>]
<modes>:
(1)空白,字符串往左移一位。
(2)left,字符串往左移N位
(3)right,字符串往右移N为
指定字符串C从子串C1进行移位:
SHIFT C UP TO C1,
执行结果返回系统参数SY-SUBRC,执行成功返回0,不匹配返回4
12、替换字符串
REPLACE <string1>with <string2> into <c>,将字符串 C 中的 String1 用 string2 取代
13、字符串转换
TRANSLATE <c> to upper/lower case.将全部字符转成大写/小写。
14、寻找字符串
从字符串F/表itab中搜索字符串G
SEARCH f/ITAB for G
SEARCH f/ITAB for G ABBREVIATED 从指定字符串中/内表中按顺序/逐行搜索相匹配