ABAP 指針常用语法

1、定義指針:

指針的定義主要有以下語句


定義任意類型的指針,但是不具備欄位結構(僅僅是一個地址)


  FIELD-SYMBOLS <carrid> TYPE ANY.


參考數據庫表定義(這種指針是含有欄位結構的,參考內表同理)


  FIELD-SYMBOLS <sflight> TYPE sflight.

  FIELD-SYMBOLS <sflight> LIKE sflight.


  FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.


動態定義具有欄位結構的指針類型

   DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,


 


   dref TYPE REF TO data.

    FIELD-SYMBOLS: <itab> TYPE ANY TABLE.


 


    CREATE DATA dref TYPE TABLE OF (tabname).

    ASSIGN dref->* TO <itab>. 


2、指針的分配(常用句法)

分配某個變量給指針

   ASSIGN var TO <field-symbols>


分配结构中的某个字段的地址给指针

  ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.


分配整個內表行給指針(指針必須定義為有欄位結構的類型)

  READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.



  LOOP AT itab

ASSIGNING  <field-symbols>.

   ENDLOOP.


分配类的方法或接口给指针

  ASSIGN dref->* TO <field-symbols>.


直接在SQL語句中分配

   SELECT *


   FROM (tabname) UP TO 20 ROWS

   INTO TABLE <itab>.


主要应用在以下几个方面:


  1 给一个数据对象分配一个别名,把结构内多层指向的变成一个短长度的


        例<fs>->f 代替  rec1->rec2-r>ec3-......->f


   2 在运行时为一个变长度的字符串设置长度和偏移


   3 在确定运行时设置一个指向数据对象的指针


   4 在运行时动态的采取和变更字段的指针


   5 可以访问结构体的组件指向内表行,不用一个单独的工作区去处理内表


  assign f to <fs>,把字段f放到了<fs>领域中,这个领域<fs>在运行时指向字段f的内容,


  这意味着f的内容的所有改变在<fs中可见.声明这个领域用:fileled-symbols:<fs>.


与其他语言不同:


  1  在passcal语言用P^ ,在c中用*p,abap没有像这样的特征


  2  在passcal和c语言中定义一个指针指向另一个指针,使让这个指针指向了两一个指针的对象


      而abap中让这个领域指向两一个领域,是这个领域指向了另一个领域的值。


例:


   FIELD-SYMBOLS: <HSL> , <HSL2> .


      LOOP AT IT_TABLE INTO STR_CLASS.


        STR_ALV-RACCT       = STR_CLASS-RACCT.

        STR_ALV-TXT20_SKAT  = STR_CLASS-TXT20.

        ASSIGN STR_CLASS-HSL TO <HSL>.


        DO 16 TIMES.

          POS  = SY-INDEX + 1.

          ASSIGN COMPONENT  POS OF STRUCTURE <HSL> TO <HSL2>.

          HSL = HSL + <HSL2>.

        ENDDO.


        IF STR_CLASS-DRCRK = 'S'.

          STR_ALV-HSL_S = HSL.

        ELSE.

          STR_ALV-HSL_H = HSL.

        ENDIF.


        IF STR_CLASS-XBILK = 'X'.

          ASSIGN COMPONENT 1 OF STRUCTURE <HSL> TO <HSL2>.

          STR_ALV-HSLVT = <HSL2>.

          STR_ALV-HSLMT = <HSL2> + STR_ALV-HSL_S - STR_ALV-HSL_H.

        ENDIF.

        COLLECT STR_ALV INTO IT_ALV.

        CLEAR STR_ALV.

        HSL = 0.

      ENDLOOP.


关键词: ABAP

网友评论

发表评论