• ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介


    ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介

    转自http://zhouwubin.blogbus.com/logs/14351256.html

    刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱.
    搞不清楚什么是work area,什么是header line,以及occurs是干什么用的.
    今天终于差不多搞明白了(我还是太弱啊...BS自己一下)
    所以还是记录下来..省得自己以后再忘记...

    先是用TYPES关键字定义一个行(row)的类型.如下:
    TYPES: BEGIN OF line,
      field1 TYPE i,
      field2 TYPE i,
    END OF line.

    这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).
    这里一行有两个字段field1和field2.

    然后是声明一个work area:
    DATA wa TYPE line.
    我用C++(还是对cpp最有好感^^)的概念理解就是,
    line是一个class,而wa是一个object.

    接着是声明一个每一行的类型是line的internal table:
    DATA itab TYPE line OCCURS 0.
    我在暂时把OCCURS作为了区别工作区和内表的标志.
    OCCURS应该有更深层次的意义,但我目前只能领悟至此...
    当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.
    上面这句就是没有header line的.改成如下就有了:
    DATA itab TYPE line OCCURS 0 WITH HEADER LINE.
    有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志).
    有一下两种方式操作itab:
    1).
    wa-field1 = 1.
    wa-field2 = 2.
    APPEND wa TO itab.

    2).
    itab-field1 = 1.
    itab-field2 = 2.
    APPEND itab.

    这里wa就是上面那个已经定义的work area.
    有header line的时候,这两种都可以.
    无header line的时候,只能用第1种.
    第2种里,itab的意义是一个header line,而不是内表.
    因为"DATA itab TYPE line OCCURS 0 WITH HEADER LINE."这样的声明,
    已经隐式声明了一个与内表同名的header line.
    所以OCCURS用来声明内表可能造成二义性(ambiguous).
    于是,OCCURS被认为是old的东西,采用一下方式声明一个内表比较好:
    DATA itab TYPE STANDARD TABLE OF line.

    还有一种声明内表的方法:
    DATA: BEGIN OF itab OCCURS 0,
                  field1 TYPE i,
                  field2 TYPE i,
               END OF itab.

    这样的itab就自动有了一个同名的header line.
    好像不会有 WITHOUT HEADER LINE 或者 NOT WITH HEADER LINE 这样的用法...
    如果没有OCCURS 0,比如这样:
    DATA: BEGIN OF itab,
                  field1 TYPE i,
                  field2 TYPE i,
              END OF itab.

    那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.

    写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛.
    还有有无OCCURS的区别.

    这样一想,简单明了~~

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/elegantok/p/1323526.html
Copyright © 2020-2023  润新知