1.数据的基本输出通过关键字WRITE的声明,能够实现数据对象的输出,并能够实现输出对象的长度、输出位置及格式等属性的控制。与变量定义一样,WRITE可以同时输出多个数据对象,对于
1.数据的基本输出
通过关键字"WRITE"的声明,能够实现数据对象的输出,并能够实现输出对象的长度、输出位置及格式等属性的控制。与变量定义一样,WRITE可以同时输出多个数据对象,对于不同的对象可以通过反斜杠”/”换行输出。
例如:
DATA: WORD(16) VALUE '0123456789ABCDEF'.
DATA: N TYPE I VALUE 123.
WRITE WORD. "单独输出一个变量
WRITE:/ WORD,
/ N. "换行输出两个变量
WRITE AT (10) WORD. "输出变量的前10位‘0123456789’
WRITE AT /5(10) WORD. "从第5格开始输出变量的前10位‘56789ABCDE’
2.数据的格式化输出
2.1 NO-ZERO : 若输出对象为N或C类型,将前面的0取代为空格
DATA STR(10) TYPE C.
STR = '000123456'.
WRITE STR. "输出:000123456
WRITE / STR NO-ZERO. "输出: 123456
2.2 NO-SIGN:对于I、P或F类型,前面都会有一个标识符号,在实际输出中占用一位但不显示,使用该语法其前面的符号不会输出
DATA STR(10) TYPE P.
STR = '123456789'.
WRITE STR. "输出:123,456,789
WRITE / STR NO-SIGN. "输出:123,456,789
2.3 NO-GROUPING:对于I或P类型,省略千分号符号。
DATA NOWDATE TYPE P.
NOWDATE = '20130730'.
WRITE NOWDATE. "输出:20,130,730
WRITE / NOWDATE NO-SIGN. "输出:20,130,730
WRITE / NOWDATE NO-GROUPING. "输出:20130730
2.4 DD/MM/YY、MM/DD/YY、DD/MM/YYYY、MM/DD/YYYY、DDMMYY、MMDDYY、YYMMDD :定义日期输出格式。
DATA:NOWDATE TYPE D.
NOWDATE = '20130730'.
WRITE / NOWDATE. "输出:20130730
WRITE / NOWDATE DD/MM/YY. "输出:13/07/30
WRITE / NOWDATE MM/DD/YY. "输出:13/07/30
WRITE / NOWDATE DD/MM/YYYY. "输出:2013/07/30
WRITE / NOWDATE MM/DD/YYYY. "输出:2013/07/30
WRITE / NOWDATE DDMMYY. "输出:130730
WRITE / NOWDATE MMDDYY. "输出:130730
WRITE / NOWDATE YYMMDD. "输出:130730
2.5 CURRENCY w:使货币字段按格式输出,w代表货币单位。维护表TCURX中货币类型时有效。
DATA SALES TYPE P.
SALES = 93860.
WRITE / SALES CURRENCY 'DEM' ROUND 2 DECIMALS 2."输出:9.39 (四舍五入)WRITE / SALES CURRENCY 'ITL' ROUND 2 DECIMALS 2."输出:938.60
2.6 DECIMALS d:控制输出数值小数位.
DATA:X TYPE P DECIMALS 3 VALUE '1.267',
Y TYPE F VALUE '125.456E2'.
WRITE:/ X DECIMALS 0, "输出结果:1
/ X DECIMALS 2, "输出结果:1.27
/ X DECIMALS 5, "输出结果:1.26700
/ Y DECIMALS 0, "输出结果:1E+04
/ Y DECIMALS 1, "输出结果:1.3E+04
/ Y DECIMALS 5, "输出结果:1.25456E+04
/ Y DECIMALS 20."输出结果:1.2545600000000000E+04
2.7 +():字符串按某一偏移量进行输出,即可以截取字符串中的一段。
DATA:X(10) TYPE C VALUE 'ABCDEFGHIJ'.
WRITE:/ X+0(10),"輸出:ABCDEFGHIJ
/ X+0(5), "輸出:ABCDE
/ X+1(9), "輸出:BCDEFGHIJ
/ X+5(3). "輸出:FGH
2.8 EXPONENT DECIMALS :对于浮点型数值,输出采用科学记数法。
DATA: X TYPE P VALUE '1023456987886'.
WRITE: / X EXPONENT 0, "输出:1023456,987,886
/ X EXPONENT 3, "输出:1023456,987,886
/ X EXPONENT 9, "输出:1023456,987,886
/ X DECIMALS 4. "输出:*3456987886.0000
2.9 ROUND r: 移除数值左边或右边的r位数据.
DATA:X TYPE P DECIMALS 2 VALUE '12493.97'.
WRITE:/ X ROUND -2,"輸出:1,249,397.00
/ X ROUND 0, "輸出:12,493.97
/ X ROUND 2, "輸出:124.94
/ X ROUND 5. "輸出:0.12
2.10 TIME ZONE tz:实现不同时区的时间转换.
DATA:S_TST TYPE TIMESTAMP.
S_TST = 20130731063015.
WRITE:S_TST TIME ZONE 'UTC+12', "輸出:2013/07/31 18:30:15
/S_TST TIME ZONE 'UTC+12'DD/MM/YY."輸出:13/07/31 18:30:15
2.11 USING EDIT MASK mask:输出数据自定义格式。
DATA TIME TYPE T VALUE '143020'.
WRITE /(8) TIME USING EDIT MASK '__:__:__'. "输出:14:30:20
WRITE /(5) TIME USING EDIT MASK '_:_:_'. "输出:1:4:3
2.12 UNDER g:参照上一行输出位置并列输出,只对WRITE 语法有效。
WRITE:/10 'NAME'(001), 15'RoomNo', 62'Age'(002).
WRITE:/ 'SANLLY' UNDER 'NAME'(001),
'4.2' UNDER 'RoomNO',
'20' UNDER 'Age'(002).
输出结果: Name RoomNo Age
SANLLY 4.2 20
2.13 NO-GAP :去除输出值间的空格,该语法只对WRITE语句有效。
WRITE:/ 'A'NO-GAP,'B'NO-GAP,'C'."输出:ABC
WRITE:/'A','B','C'. "输出:A B C
2.14 输出数据对齐方式的设置:
LEFT-JUSTIFIED(向左对齐)、
RIGHT-JUSTIFIED(向右对齐)、
CENTERED(居中对齐)
DATA: COUNT TYPE I VALUE 100.
WRITE: /5 'The total count is',COUNT LEFT-JUSTIFIED.
WRITE: /5 'The total count is',COUNT RIGHT-JUSTIFIED.
WRITE: /5 'The total count is',COUNT CENTERED.
不同的数据类型都会有各自默认的对齐方式。各基本数据默认输出对齐方式如下表所示:
C=LEFT-JUSTIFIED |
I=RIGHT-JUSTIFIED |
P=RIGHT-JUSTIFIED |
F=RIGHT-JUSTIFIED |
N=LEFT-JUSTIFIED |
D=LEFT-JUSTITIED |
T=LEFT-JUSTIFIED |
X=LEFT-JUSTIFIED |
3.數据的赋值
对变量的赋值是程序的常用操作之一,ABAP通常的赋值语句是MOVE或赋值运算符”=“,还可以通过WRITE语句实现将源字段的值赋值给目标变量,源字段可为常量或变量等数据对象。语法定义如下:
MOVE TO .
= .
这两种方式是完全等价的,另外,通过WRITE语名可以实现字符类型数值传递而不会输出该值。
WRITE TO .
WRITE赋值只可以在字符类型对象中赋值,否则系统会出错。
数据赋值还可以使用源字段的偏移量。下例实现在源字段中取偏移量赋值给目标变量,其语法定义及实例如下:
+() = .
例如:
DATA A TYPE I VALUE 186.
DATA: B TYPE I.
MOVE A TO B.
WRITE: / A,"输出:186
/ B."输出:186
再如:
DATA: WORD1(18) TYPE C VALUE '0123456789ABCDEFGH',
WORD2 LIKE WORD1.
MOVE WORD1+10(5) TO WORD2.
WRITE: / WORD1,"輸出:0123456789ABCDEFGH
/ WORD2."輸出:ABCDE
4.通过指针实现数据的赋值.
与上面赋值方式不同,字段符号(FIELD SYMBOLS)不是直接对变量赋值,而是通过指针给变量分配源字段的内存地址。指针对象通过语名FIELD-SYMBOLS加上尖括号“<>”来定义,用语句ASSIGN来分配数值。
DATA:NUMBER TYPE I VALUE 12.
FIELD-SYMBOLS:,
TYPE I,
LIKE NUMBER.
ASSIGN:NUMBER TO ,
NUMBER TO ,
NUMBER TO .
5.数据类型的转换
在不同的数据对象之间赋值时,系统会自动进行类型转换,转换过程遵照固定规则进行,
例如将一个C类型数据赋值给N类型的对象,只有数字字符被传递,其他字符则被忽略。
DATA:TEXT(10) TYPE C VALUE 'ABC1234567',
NUM(10) TYPE N,
INT TYPE I.
NUM = TEXT.
INT = NUM.
WRITE:NUM,"0001234567
/ INT."1,234,567
变量ttext赋值给tnum时,ABC被转换为000,当tnum赋值给tint时,默认取其整数部分。需要注意的是,C类型不能直接赋值给I,如果上例语句中写与tint=ttext,系统将报错提示数据类型转换错误。
ABAP中还可以使用以下语法实现数据间赋值:
MOVE A TO B.
WRITE A TO B.
不同进制之间的转换可以参考如下方法:
DATA:CHR TYPE C.
FIELD-SYMBOLS: TYPE X, "定义一个十六进制的指针类型
TYPE C.
CHR = 'A'.
ASSIGN CHR TO CASTING. "将字符转换为十六进制
= + 1.
ASSIGN TO CASTING. "将十六进制的指针对象转换为字符指针对象
MOVE TO CHR. "将指针变量赋值到字符变量