数据的输出与数值传递

1.数据的基本输出

      通过关键字"WRITE"的声明,能够实现数据对象的输出,并能够实现输出对象的长度、输出位置及格式等属性的控制。与变量定义一样,WRITE可以同时输出多个数据对象,对于不同的对象可以通过反斜杠”/”换行输出。

例如:

DATAWORD(16VALUE '0123456789ABCDEF'.
DATATYPE VALUE 123.
WRITE WORD.           "单独输出一个变量
WRITE:/ WORD,
      / N.            "换行输出两个变量
WRITE AT (10WORD.   "输出变量的前10位‘0123456789’
WRITE AT /5(10WORD"从第5格开始输出变量的前10位‘56789ABCDE’

2.数据的格式化输出

2.1 NO-ZERO : 若输出对象为N或C类型,将前面的0取代为空格

DATA STR(10TYPE C.
STR '000123456'.
WRITE STR.            "输出:000123456
WRITE / STR NO-ZERO.  "输出:   123456

2.2 NO-SIGN:对于I、P或F类型,前面都会有一个标识符号,在实际输出中占用一位但不显示,使用该语法其前面的符号不会输出

DATA STR(10TYPE 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 DECIMALS 2."输出:9.39 (四舍五入)WRITE / SALES CURRENCY 'ITL' ROUND DECIMALS 2."输出:938.60

 2.6 DECIMALS d:控制输出数值小数位.

DATA:TYPE DECIMALS VALUE '1.267',
     Y TYPE VALUE '125.456E2'.

WRITE:DECIMALS 0"输出结果:1
      / DECIMALS 2"输出结果:1.27
      / 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 +<offset>(<length>):字符串按某一偏移量进行输出,即可以截取字符串中的一段。

DATA:X(10TYPE VALUE 'ABCDEFGHIJ'.
WRITE:/ X+0(10),"輸出:ABCDEFGHIJ
      / X+0(5)"輸出:ABCDE
      / X+1(9)"輸出:BCDEFGHIJ
      / X+5(3)"輸出:FGH

2.8 EXPONENT <n1> DECIMALS <n2> :对于浮点型数值,输出采用科学记数法。

DATATYPE VALUE '1023456987886'.
WRITEEXPONENT 0"输出:1023456,987,886
       / EXPONENT 3, "输出:1023456,987,886
       / EXPONENT 9, "输出:1023456,987,886
       / DECIMALS 4. "输出:*3456987886.0000

2.9  ROUND r: 移除数值左边或右边的r位数据.

DATA:TYPE DECIMALS VALUE '12493.97'.
WRITE:ROUND -2,"輸出:1,249,397.00
      / ROUND 0"輸出:12,493.97
      / ROUND 2"輸出:124.94
      / 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 VALUE '143020'.
WRITE /(8TIME USING EDIT MASK  '__:__:__'.  "输出:14:30:20
WRITE /(5TIME 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(居中对齐)


DATACOUNT TYPE 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 <value> TO <field>.

    <field> = <value or expression>.

    这两种方式是完全等价的,另外,通过WRITE语名可以实现字符类型数值传递而不会输出该值。

    WRITE  <vaule> TO  <field>.

     WRITE赋值只可以在字符类型对象中赋值,否则系统会出错。      

     数据赋值还可以使用源字段的偏移量。下例实现在源字段中取偏移量赋值给目标变量,其语法定义及实例如下:

      <field>+<offset>(<length>) = <value>.

例如:

DATA TYPE VALUE 186.
DATATYPE I.
MOVE TO B.
WRITE/ A,"输出:186
       / B."输出:186

再如:

DATAWORD1(18TYPE VALUE '0123456789ABCDEFGH',
      WORD2 LIKE WORD1.

MOVE WORD1+10(5TO WORD2.
WRITE/ WORD1,"輸出:0123456789ABCDEFGH
       / WORD2."輸出:ABCDE

4.通过指针实现数据的赋值.

  与上面赋值方式不同,字段符号(FIELD SYMBOLS)不是直接对变量赋值,而是通过指针给变量分配源字段的内存地址。指针对象通过语名FIELD-SYMBOLS加上尖括号“<>”来定义,用语句ASSIGN来分配数值。

DATA:NUMBER TYPE VALUE 12.
FIELD-SYMBOLS:<F1>,
           <F2> TYPE I,
           <F3> LIKE NUMBER.

ASSIGN:NUMBER TO <F1>,
       NUMBER TO <F2>,
       NUMBER TO <F3>.

5.数据类型的转换

   在不同的数据对象之间赋值时,系统会自动进行类型转换,转换过程遵照固定规则进行,

例如将一个C类型数据赋值给N类型的对象,只有数字字符被传递,其他字符则被忽略。

DATA:TEXT(10TYPE VALUE 'ABC1234567',
     NUM(10TYPE 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:<FS> TYPE X"定义一个十六进制的指针类型
              <FC> TYPE C.
CHR 'A'.
ASSIGN CHR TO <FS> CASTING.  "将字符转换为十六进制
<FS> <FS> + 1.
ASSIGN <FS> TO <FC> CASTING"将十六进制的指针对象转换为字符指针对象
MOVE <FC> TO CHR.            "将指针变量赋值到字符变量

原文地址:https://www.cnblogs.com/sanlly/p/3227948.html