我们一起学ABAP (02)~基础语法与数据类型,输出到屏幕
转载地址:http://blog.****.net/qq_37625033/article/details/65629622
1、ABAP(ABAP/4)的基本语法
基本数据类型及属性:
DECIMALS 可以在数据类型后制定小数位的个数。
1.1、规则和几点建议:
a. 我们常犯的低级错误~ 语法切换(中英)时,忽略了符号的差异,计算机会把不同的符号解释成不同的意义!
b. 不要用词典的释义来理解你在编程中遇到的单词,两者之间是有很多差异的,不建议这样的学习方法,是弯路! c. ABAP中是用 句号 "." 来表示一个语句的结束符号.
d. ABAP 中用 双引号( " )作为单行注释符号(有些书上又称它 “右注释符号”), 用 星号(*) 做为多行注释符号,
字符串修饰符号,单引号( ' ' ).
2、变量的声明:
关键字”DATA“, 要注意的是,声明多个变量时,DATA关键字后面必须加上冒号”:“,否则会出现语法错误。变量名最长30个字元,不能含有 "+" 、"-"、 "*" 、"/" 、"()"等字符。
语法:
DATA <变量名>(长度) TYPE <数据类型> VALUE<默认值>
示例:(注意长度和默认值都可以不写,则系统会自行给个”默认值“。下面的几种声明都是语法正确的。)
DATA: test(10) TYPE C VALUE 'Hello SAP',
test1(10) TYPE I ,
test2 TYPE P,
test TYPE I VALUE '10'.
如果你自己写默认值了,那么这个值就必须与前面声明的类型一致,长度也最好一致,否则会”截取“声明时的长度来处理运行结果。
2.1、系统保留字 ( 就是:系统自已 专用的名词。)
2.2、 以参考的形式定义变量 , 关键字 "LIKE"
语法:(同样的,单个不用加冒号,多个(大于1)必须加冒号”:“)
DATA <变量1> LIKE <变量2>
2.3、变量的初始化 关键字 "CLEAR"
语法:(同样的,单个不用加冒号,多个(大于1)必须加冒号”:“)
CLEAR <变量名>
3、常量
常量:一旦被定义就会长期保存,并且其值不可改变(修改)的变量。
关键字 "CONSTANS" (和定义变量唯一的区别是用的关键字不同,语法雷同.)
语法:(单个不加冒号,多个(大于1)必须加冒号”:“)
CONSTANTS <变量名>(长度) TYPE <数据类型> VALUE(默认值)
例子:decimals 用于指定小数位,前面有讲。
CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'.
4、STATICS 定义
我对这个关键字的理解是,定义一个临时的变量,当它所在的程序结束后,它就会被释放(清除)。
语法:(单不加,否则必须加冒号)
STATICS <变量名>(长度) <数据类型> <默认值> <decimals这个随意,有木有都可以>
5、自定义变量类型
关键字 "TYPES"
语法: 单不加,否则必须加冒号
TYPES <变量名> (长度) <数据类型> <可有可无的decimals>
栗子:(单不加,否则必须加冒号)
TYPES: NAME(10) TYPE C,
NUMBER TYPE I.
DATA: PLAUER TYPE NAME VALUE 'JERY TANG', "定义类型为NAME(ABAP中注释符号为英文中的双引号'" ')
NICKNAME LIKE PLAUER.
6、结构体的定义
结构体:也是一种数据类型,但不属于基本的数据类型。是一种临时创建的,有多个变量组成的临时对象。
关键字: DATA Begin of ... End of
语法:
DATA: BEGIN OF <结构体名字>
<字段1>
<字段2>
......
END OF<结构体名字>.
栗子:
DATA: BEGIN OF ADDRESS,
NAME(10) TYPE C,
NUMBER TYE P,
END OF ADDRESS.
注意; 定义好后,就可以这样使用了,如: ADDRESS-NAME. (可以把这个看作一个定义好的变量)
6.1、结构体的赋值
a、ABAP中可以使用 "WRITE"语句来输出结果。
b、ABAP中可以对定义了具体字段名字的结构体直接赋值。
c、相同的结构可以直接用 等号 "="来数显数据的相互复制。
d 、相同结构体可以使用 "MOVE ......TO...."语句进行赋值,不同结构体可以使用 ”MOVE-CORRESSPONDING"将两个结构体之间相同的字段自动匹配并赋值。
举个栗子:
USERINF-SID = 'A00001'.
USERINF-NAME = 'JERY'.
USERINF-TEL = '010-12345678'.
USER2 = USERINF.
WRITE: USER2, USERINF-SID.
"输出结果为: A00001 JERY 010-123456 A00001
栗子:
DATA: BEGIN OF USERDETALL,
SID(10) TYPE C, "编号
NAME(20) TYPE C, "姓名
BIRDATE TYPE D, "出生日期
ADD(50) TYPE C, "地址
END OF USERDETALL.
MOVE-CORRESSPONDING USERINF TO USERDETALL.
注意:相同字段之间进行数值传递(相互赋值),其他的不同类型字段的值将为空!
结构体的另外一种赋值方式:继承式赋值(学到继承再一起学习哈~)
7、WRITE语句的使用(在屏幕中定位输出)
语法:("/" 这个斜杠在ABAP中用作换行符号)
WRITE AT [/] <位置> (长度) <变量名>
位置:最长为三位数字的变量或者数字,表示在屏幕上 的位置。 另外,如果格式规范只包含直接量(PS:不是变量的值都是直接量),可以忽略关键字 AT。
栗子:
REPORT Z7003.
WRITE : ' First line' .
WRITE : / 10 'First line',
24 'Test write' .
WRITE : / (5) 'First line',
24 ' Test write' .
结果样式如下:
7.1、WRITE语句格式化输出
格式化选项 用途
7.2、日期字段的格式化
选项 用途
7.3 、符号和图标的输出
语法:(当然关键字必须和名字的值类型一样,不然无法识别 ,报错。)
WRITE <符号的名字> AS SYMBOL.
WRITE <图标的名字> ASICON.
栗子:
INCLUDE <SYMBOL>.
INCLUDE <ICON>.
WRITE: / 'Phone Symbol:' , SYM_PHONE AS SYMOL.
SKIP.
WRITE: / 'Alarm lcon: ' , ICON_ALARM AS ICON.
输出的结果和样式:
7.4、输出屏幕上的线和空行
a、水平线
语法:
ULINE AT [/] <起始位置> (长度)
等同于另一种写法:
WRITE AT [/] <起始位置>(长度)SY-ULINE.
b、垂直线
语法:
WRITEAT [/] <起始位置> SY-VLINE.
等同于:
WRITE AT [/] <起始位置> '
| '.
c、空行
语法:
SKIP [行数].
等同于:
SKIP TOLINE<n>.
d、输出复选框
语法:
WRITE <F> AS CHECKBOX.
栗子:
DATA: FLAG1 VALUE ' ' ,
FLAG2 VALUE 'X' ,
FLAG3(5) VALUE 'Xenon'.
WRITE: / 'Flag 1' ,FLAG1 AS CHECKBOX,
/ 'Flag 2' , FLAG2 AS CHECKBOX,
/ 'Flag 3' , FLAG3 AS CHECKBOX.
输出效果:
7.5、颜色输出
语法:
FORMAT [COLOR {{{color (ON)} | OFF}|{ = col}}]
"使用颜色
[INTENSIFIED[{ON|OFF}|{= flag}]] “背景颜色
[INVERSE [{ON|OFF} | { =flag }]] "字体颜色
栗子:
DATA col TYPE I VALUE 0.
DO 8 TIMES.
col = sy-index - 1.
FORMAT COLOR = col.
WRITE: / col COLOR OFF,
'INTENSIFIED ON' INTENSIFIED ON,
'INTENSIFIED OFF' INTENSIFIED OFF,
'INVERSE ON' INVERSE ON.
ENDDO.
输出结果和样式效果: