技术开发 频道

ABAP指针常用语法

【IT168 技术文章】

    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.
4
相关文章