科莱特教育

 找回密码
 立即注册
查看: 2642|回复: 0

ABAP 数据类型与数据对象

[复制链接]

11

主题

11

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2020-12-31 08:04:24 | 显示全部楼层 |阅读模式
ABAP 开发系列(04): ABAP数据类型与数据对象
ABAP Programming Language 的内容主要有:
1.数据类型与数据对象
2.内表和内表结构(Internal Table)
3.数据流控制语句
4.模块化(Modularization)


1.数据类型与数据对象
1.1 ABAP元素数据类型
ABAP元素数据基本类型有以下8种:
类型描述长度标准长度
C字符1-65365字符1位字符
N数字文本1-65365字符1位字符
I整型4 位
P1-16位8位
F浮点型8 位
D日期类型8位字符
T时间类型6位字符
X十六进制1位

其中:
C 和 N 为字符类型,N 为数字文本,如果定义的位数为4位,但是数据只有两位时,会补上前置零,例如:0020.
I、P、F为数字类型,I 为整型,P 和 F 都为浮点数,只是P的精确度比 F 高,故用 P 类型频率会比 F 类型高。
ABAP 中的日期和时间,分属不同类型,分别是 D 和 T ,然后在显示时,字符间中间不带任何格式符;
例如,日期:20140224,时间:120535。

提示:内部显示和外部显示
SAP 数据字典中,显示的数据需要区分内部显示和外部显示。
外部显示就是我们在屏幕上看到的数据;
内部显示则是系统内部操作的数据。
例如:
N 类型:0020,外部显示就是20,而内部显示则是0020;
日期类型:2014-02-24,外部显示为2014.02.24(根据SAP用户日期格式设置显示),而内部显示则是20140224.

1.2 变量的定义
1.2.1 通过类型定义
语法:
DATA   <Name> (<length>) TYPE  <data type> VALUE <default>.
通过Data关键字声明变量,如若需要定义多个变量时,可用在Data 关键字后加上冒号“:”.
例如:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em][size=1em]* 定义单个变量:
[size=1em]DATA Person(35) TYPE C.

[size=1em]* 定义多个变量:
[size=1em]DATA:  Player(35)  TYPE C,
[size=1em]       NickName(35),
[size=1em]       Points      TYPE I,
[size=1em]       Games       TYPE I  VALUE '10',
[size=1em]       Average(5)  TYPE P,
[size=1em]       Starter,
[size=1em]       Acquired    TYPE D.




1.2.2 初始值
在 ABAP 的8种基本类型中,每个类型都有其初始值。
在定义变量时,如果没有设置其默认值,或者使用CLEAR 语法清除变量时,系统都会将其恢复成初始值。
每个类型的初始值如下表所示:
类型初始值类型初始值
C(blank)Nzeroes
IzeroD00000000
PzeroT000000
FzeroesX00
在定义变量时,可以通过分配默认值,来初始化变量:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em][size=1em]DATA:  Player(35)  TYPE C ,
[size=1em]       NickName(35)   VALUE 'Dr.J',
[size=1em]       Points      TYPE I,
[size=1em]       Games       TYPE I VALUE '10',
[size=1em]       Average(5)  TYPE P VALUE 10,
[size=1em]       Starter     VALUE 'Yes',
[size=1em]       Acquired    TYPE D VALUE '20100101'.




使用CLEAR语法,则会将变量恢复回初始值(上表所示)。如:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em][size=1em]* 清除单个变量
[size=1em]   CLEAR  NickName.

[size=1em]* 清除多个变量
[size=1em]   CLEAR: Points, Games, Average.




1.2.3 通过参考值定义(LIKE 语法)
ABAP可以通过现有的类型,通过LIKE关键字,将已定义好的变量作为参考类型,作为新定义变量的类型。
语法:

DATA  <Name1> LIKE  <Name2> VALUE <default>.
如:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]DATA: Player(35) TYPE C  VALUE 'Julius Erving',
[size=1em]      Nickname(35),
[size=1em]      Acquired   TYPE D.



使用LIKE定义同样类型的变量:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]DATA: Player(35) TYPE C VALUE 'Julius Erving',
[size=1em]      Nickname   LIKE PLAYER,
[size=1em]      Acquired   LIKE SY-DATUM.




1.3 定义常量
语法:

CONSTANTS  <name>(<length>) TYPE <data type> VALUE <value>.
通过关键字CONSTANTS 声明定义常量,与变量一样,区别在于:
常量定义时,必须分配默认值,且常量不能在程序中修改。
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]CONSTANTS: TEAM1(20) TYPE C     VALUE '76ers',
[size=1em]           TEAM2     LIKE TEAM1 VALUE 'Celtics',
[size=1em]           TOT_GAMES TYPE I     VALUE 82.




1.4 自定义类型
上面提到,ABAP中有8种基本类型,ABAP也允许用户自定义类型,便于维护操作。
例如,不同字节长度字符串用途不同,如果需要定义不同的长度的C类型来操作,就可以通过自定义类型实现。
语法:

TYPES  <name>(<length>) TYPE <data type>.
通过关键字 TYPES,自定义相关类型,然后在定义声明变量时,使用自定义的类型作为变量类型:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em][size=1em]* 自定义类型
[size=1em]TYPES:  NAME(35)  TYPE C,
[size=1em]        TEAMS(20) TYPE C.

[size=1em]* 使用自定义类型作为变量类型
[size=1em]DATA: PLAYER   TYPE NAME   VALUE 'Troy Aikman',
[size=1em]      NICKNAME LIKE PLAYER.

[size=1em]* 使用自定义类型作为常量类型
[size=1em]CONSTANTS: TEAM1  TYPE TEAMS VALUE 'Cowboys',
[size=1em]           TEAM2  LIKE TEAM1 VALUE 'Packers'.




1.5 数据输出
1.5.1 数据基本输出
ABAP 8种基本类型的标准输出长度及输出对齐方式,如下表所示:
类型输出标准长度对齐方式
C自定义长度左对齐
I12位右对齐
P(2 * 自定义长度 + )1右对齐
F22位右对齐
N自定义长度左对齐
D10位左对齐
T8位左对齐
X(2*自定义长度)左对齐

通过WRITE关键词输出多个数据对象,然后通过反斜杠”/“ 进行换行输出:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em][size=1em]DATA: FLOAT TYPE F VALUE ‘98.7654321E2’,
[size=1em]      PACK  TYPE P VALUE 12,
[size=1em]      INT   TYPE I VALUE 32.

[size=1em]WRITE FLOAT.             "单独输出一个变量

[size=1em]WRITE:  / FLOAT,         "输出多个变量
[size=1em]        / FLOAT EXPONENT 1  DECIMALS 3,   "通过科学计数法并保留3位小数输出
[size=1em]        / FLOAT EXPONENT 0  DECIMALS 2,
[size=1em]        / PACK,
[size=1em]        / PACK DECIMALS 1,   "保留1位小数点输出
[size=1em]        / INT DECIMALS 2.    "保留2位小数点输出



输出结果:
9.876543210000000E+03
987.654E+01
9876.54
12
12.0
32.00

1.6 定义指针变量
ABAP中存在指针变量,指针变量定义后,不是通过变量来保存值,而是通过指针给变量分配源字段的内存地址。
一般多用于在与大量数据交互操作时,优化程序性能。
语法:

FIELD-SYMBOLS: <<name>> TYPE <data type>.
FIELD-SYMBOLS: <<name1>> LIKE <name2>.
通过关键字 ASSIGN 为指针分配值:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em][size=1em]DATA:  NUM TYPE I VALUE 12.

[size=1em]FIELD-SYMBOLS:
[size=1em]    <f1>,
[size=1em]    <f2> TYPE I,
[size=1em]    <f3> LIKE NUM.

[size=1em]ASSIGN:
[size=1em]    NUM TO <f1>,
[size=1em]    NUM TO <f2>,
[size=1em]    NUM TO <f3>.

[size=1em]WRITE: / ‘Line 1:’, NUM, <f1>, <f2>, <f3>.

[size=1em] <f1> = 32.

[size=1em]WRITE: / ‘Line 2:’, NUM, <f1>, <f2>, <f3>.
[size=1em]</f3></f2></f1></f1></f3></f2></f1></f3></f2></f1></f3></f2></f1>



输出结果:
Line 1: 12         12     12     12
Line 2: 32         32     32     32

需要注意的是,如若没有对指针分配值,却使用该指针时,语法检查时,可以通过;
但在运行程序时,会出现 Runtime Error 的错误。


回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则


QQ|科莱特教育

GMT, 2025-4-19 00:16 , Processed in 0.050324 second(s), 23 queries .

福州科莱特教育科技有限公司 版权所有 闽ICP备2021003729号-2

Copyright C 2018-2022 All Rights Reserved

快速回复 返回顶部 返回列表