zoukankan      html  css  js  c++  java
  • ABAP开发基础知识:6)数据的输出与数值传递

        数据在屏幕输出是用户获取信息的重要途径之一,本篇将介绍如何在SAP中实现数据输出及数值传递。

        1)数据的基本输出

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

          FOR EXAMPLE:

          DATA:WORD(16) VALUE '0123456789ABCDEF'.

          DATA:N TYPE I VALUE 123.

          WRITE WORD.  "单独输出一个变量.

          WRITE:WORD,N. "WRITE语句链输出两个变量.

          WRITE:/ WORD,/ N.  "换行输出两个变量.

          WRITE AT /(10) WORD. "输出变量的前10位.

          WRITE AT /3(10) WORD.  "缩进3格输出变量前10位.

         2)数据的格式化输出

          程序开发中经常有不同的输出格式需求,使用WRITE语句能够实现对输出数值的格式化,其相关语法如下。

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

             FOR EXAMPLE:

             DATA str TYPE STRING.

             str = '00866'.

             WRITE str.                  "输出:00866.

             WRITE / str NO-ZERO. "输出:    866.

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

           3) NO-GROUPING:对于I或P类型,省略千分号符号。

              FOR EXAMPLE:

              DATA wealth TYPE I VALUE 86666669.
              WRITE wealth.                       "输出:86,666,669.
              WRITE wealth NO-GROUPING. "输出:86666669.

              DATA nowdate TYPE P.
              nowdate = 20120321.
              WRITE nowdate.                       "输出:20,120,321.
              WRITE nowdate NO-GROUPING. "输出:20120321.

           4) DD/MM/YY、NNM/DD/YY、DD/MM/YYYY、MM/DD/YYYY、DDMMYY、MMDDYY、YYMMDD:定义日期输出格式。

               FOR EXAMPLE:

               DATA now TYPE D VALUE '20120321'.
        WRITE / now.                      "输出:20120321.
        WRITE / now DD/MM/YY.      "输出:12.03.21.
        WRITE / now MM/DD/YY.      "输出:12.03.21.
        WRITE / now DD/MM/YYYY.   "输出:2012.03.21.
        WRITE / now MM/DD/YYYY.   "输出:2012.03.21.
        WRITE / now DDMMYY.         "输出:120321.
        WRITE / now MMDDYY.         "输出:120321.
        WRITE / now YYMMDD.         "输出:120321.

            5) CURRENCY w:使货币字段按格式输出,w代表货币单位。维护表TCURX中货币类型时有效。

               FOR EXAMPLE:

               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

           6) DECIMALS d:控制输出数值小数位。

                FOR EXAMPLE:

                DATA:x TYPE P DECIMALS 2 VALUE '1.267',
                         y TYPE F VALUE '125.45623'.
                WRITE: / x DECIMALS 0,     "输出:1
                            / x DECIMALS 2,     "输出:1.27
                            / x DECIMALS 5,     "输出:1.27000
                            / y DECIMALS 0,      "输出:1.3E+02
                            / y DECIMALS 5,      "输出:1.25456E+02
                            / y DECIMALS 20.    "输出:1.25456230000000001E+02

           7) +<offset>(<length>):字符串按某一偏移量进行输出,即可以截取字符串中的一段。

                 FOR EXAMPLE:

                 DATA: s(16) TYPE C VALUE 'ABCDEFGHIJKLMNOP'.
                 WRITE: / s+0(10),    "输出:ABCDEFGHIJ
                             / s+0(5),      "输出:ABCDE
                  / s+1(9),      "输出:BCDEFGHIJ
                  / s+5(5),      "输出:FGHIJ
                 / s+3.         "输出:DEFGHIJKLMNOP

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

                 FOR EXAMPLE:

                 DATA: x TYPE P VALUE '1023456987886'.

                 WRITE: / x EXPONENT 0. "输出:1,023,456,987,886.

            9) ROUND r:移除数值左边或者右边的r位小数:

                 FOR EXAMPLE:

                 DATA l TYPE P DECIMALS 2 VALUE '12593.86'.
                 WRITE: / l ROUND -2,  "输出:1259386.00
                  / l ROUND 0,    "输出:12593.86
                  / l ROUND 2,    "输出:125.94
                       / l ROUND 5.    "输出:0.13

              

            10) TIME ZONE tz:实现不同时区的时间转换。

                  FOR EXAMPLE:

                  DATA ts TYPE TIMESTAMP VALUE 20120322086069.
                  WRITE: s_stst TIME ZONE 'UTC+12',           "输出:2012.03.22 08:60:6
                   /, s_stst TIME ZONE 'UTC+12' DD/MM/YY.   "输出:12.03.22 08:60:6

       

             11) USING EDIT MASK mask:输出数据自定义格式。

                  FOR EXAMPLE:

                  DATA TIME TYPE T VALUE '154633'.
                  WRITE /(8) TIME USING EDIT MASK  '__:__:__'.  "输出:15:46:33
           WRITE /(5) TIME USING EDIT MASK  '_:_:_'.        "输出:1:5:4

             12) UNDER g:参照上一行输出位置并列输出,只对WRITE语句有效。

                   FOR EXAMPLE:

                   WRITE: /10 'Name'(001),30'RoomNo',50'Age'(002).
                   WRITE: / 'JERY' UNDER 'Name',
                                  '5.21' UNDER 'RoomNo',
                                   '27'   UNDER 'Age'(002).

                   输出如下(前面的数字索引代表缩进量,如果前面数字占据了后面的位置,则不显示):

                   Name               RoomNo             Age

                   JERY                5.21                   27

             13) NO-GAP:去除输出值间的空格,该语法只对WRITE语句有效。

                    FOR EXAMPLE:

                    WRITE: / 'A' NO-GAP,'B' NO-GAP,'C'.
                    WRITE: / 'A','B','C'.

                     输出:ABC

                             A  B  C  

             14) LEFT-JUSTIFIED(向左对齐)、RIGHT-JUSTIFIED(向右对齐)、CENTERED(居中对齐):输出参数对齐方式设置。

                    FOE EXAMPLE:

                    DATA count TYPE I VALUE 100.
                    WRITE: /5 'The Total is',count.
                    WRITE: /5 'The Total is',count LEFT-JUSTIFIED.

                    输出:The Total is        100

                             The Total is 100  “左对齐

                    不同的数据类型都会有各自默认的对齐方式。各基本数据默认输出对齐方式如下表所示:

     C=LEFT-JUSTIFIED  I=RIGHT-JUSTIFIED  P=RIGHT-JUSTIFIED  F=RIGHT-JUSTIFIED
     N=LEFT-JUSTIFIED  D=LEFT-JUSTITIED  T=LEFT-JUSTIFIED  X=LEFT-JUSTITIED

             

          3) 数据的赋值

          对变量的赋值是程序的常用操作之一,ABAP通常的赋值语句是MOVE或赋值运算符”=“,还可以通过WRITE语句实现将源字段的值赋值给目标变量,源字段可为常量或变量等数据对象。

          语法定义如下:

          MOVE <value> TO <field>.

          <field> = <value or expression>.

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

          WRITE  <vaule> TO  <field>.

          需要强调的是,WRITE赋值只可以在字符类型对象中赋值,否则系统会出错。
          数据赋值还可以使用源字段的偏移量。下例实现在源字段中取偏移量赋值给目标变量,其语法定义及实例如下:

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

          FOR EXAMPLE:

          DATA m TYPE I VALUE 186.
          DATA: o TYPE I.
          MOVE m TO o.
          WRITE: / m,/ o.

          "输出:186 
                   186


          DATA: company(8) TYPE C VALUE 'TAOHEUNG',
          mycompany(8) TYPE C,
          hiscompany LIKE company.
          WRITE company TO mycompany.
          WRITE: / 'mycompany is',mycompany.

          MOVE company+3(5) TO hiscompany.
          WRITE: / 'hiscompany',hiscompany.

          "输出:mycompany is TAOHEUNG

                    hiscompany is HEUNG.


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

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

            FOR EXAMPLE:

            DATA:number TYPE I VALUE 12.
            FIELD-SYMBOLS:<f1>,
                         <f2> TYPE I,
                           <f3> LIKE number.

        ASSIGN:number TO <f1>,
           number TO <f2>,
           number TO <f3>.

          WRITE: / 'f1 is',<f1>,
               / 'f2 is',<f2>,
               / 'f3 is',<f3>.
      <f1> = 36. "重新赋值
         WRITE: / 'f1 is',<f1>,
               / 'f2 is',<f2>,
               / 'f3 is',<f3>.

          “输出:f1 is 12
                    f2 is 12
                    f3 is 12
                    f1 is 32
                    f2 is 32
                    f3 is 32

          上例中,将number的地址同时分配给了<f1>、<f2>、<f3>三个指针,的怪三个指针对应的值都为12,当通过运算符”=“重新给<f1>赋值时,实际是修改了其对应地址number的值,所以三个指针对应的值都变成了32。

         


         


      
     

             

  • 相关阅读:
    第一个ExtJS练习(添加用户面板)
    利用高德地图通过给定坐标点画带箭头方向的路径
    安装myeclipse2015 stable 3.0破解之后发生出现SECURITY ALERT:iNTEGRITY CHECK ERROR然后闪退解决方案
    当你的SSM项目中的springmvc.xml发生第一行错误解决方案
    新建maven项目遇到Select an Archetype时没有maven-archetype-webapp处理方法
    XML、HTML、JSON对比
    Mac配置apache2.4.25服务器
    使用HTTP协议访问网络
    android数据持久化存储
    常用git命令
  • 原文地址:https://www.cnblogs.com/foxting/p/2410451.html
Copyright © 2011-2022 走看看