天天看點

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中貨币類型時有效。

           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>:對于浮點型數值,輸出采用科學記數法。

             DATA: x TYPE P VALUE '1023456987886'.

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

        9) ROUND r:移除數值左邊或者右邊的r位小數:

             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:輸出資料自定義格式。

              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>.

      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>,

      “輸出: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。

繼續閱讀