• FIELD-SYMBOLS


    REPORT ZTEST.

    FIELD-SYMBOLS <fs> TYPE ANY.  "定义<fs>指向任何类型,不能指向表类型
    DATA:var(10) TYPE c.

    DATA:BEGIN OF struc,
    comp1 TYPE LENGTH VALUE '1',
    comp2 TYPE LENGTH 20 VALUE 'abcdefg',
    END OF struc,

    comp_value TYPE LENGTH 10 VALUE 'value',
    comp_name  TYPE LENGTH 15.

    var = 'Hello'.
    ASSIGN var TO <fs>.
    WRITE: / <fs>. "输出: Hello
    <fs> = 'World'.
    WRITE:/ var. "输出: World
    "<fs>是一个指向变量var的指针,操 作<fs>就身操作var本身一样。 field-symbols一般操作:Field-Symbols:


    "指派结构的一个字段给<fs>
    ASSIGN struc-comp1 TO <fs>.  WRITE:/ <fs>. " 输出:1 "指派结构字段的基地址加上两倍此字段长度的地址给字段符号
    ASSIGN struc-comp1 INCREMENT TO <fs>. WRITE:/ <fs>. " 输出: b

    "指派结构的第二个组件字段给字段符号
    ASSIGN COMPONENT OF STRUCTURE struc TO <fs>.  WRITE:/ <fs>. " 输出:abcdefg
    "动态指定字段名
    comp_name = 'comp_value'.
    ASSIGN (comp_name) TO <fs>. WRITE:/ <fs>. "输 出:value

    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 .

  • 相关阅读:
    DLPAR中关于cpu资源的分配
    官网下载storage manager方法
    vsftpd中关于ftpusers和user_list两个文件的说明以及vsftpd.conf中的userlist_enable和userlist_deny两个配置项的解释
    Windows10搭建FTP服务器
    fdisk分区的起始扇区为什么是2048——linux 分区与启动的小故事
    P740SAS卡报错的处理
    linux 下route命令
    实验01:构建FTP服务器
    IBMx86 x3850 7143机器面板PCI灯亮
    css的选择器汇总
  • 原文地址:https://www.cnblogs.com/eric0701/p/3371531.html
Copyright © 2020-2023  润新知