[转帖]ABAP实践学习-内表的常用处理

来源:互联网 发布:域名注册需要实名吗 编辑:程序博客网 时间:2024/06/06 00:24
Internal Table 的宣告
   ABAP/4 Internal Table(内表)如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功 
   .
   1.使用 TYPE 叙述
  语法:
        TYPES   OCCURS 
        宣告一个数组 , 型态为 , 长度为
        Example:
                 TYPES A TYPE I OCCURS 10.
                 A 是个10个元素的数值Internal Table
        Example:
                 TYPES: BEGIN OF LINE,
                        COL1 TYPE I,
                        COL3 TYPE I,
                        END OF LINE.
                 TYPES ITAB TYPE LINE OCCURS 10.
                 宣告一个Internal Table ITAB, 总共有10个元素, WORK AREA 名称
                 LINE
   2.使用 DATA 叙述      
     若使用DATA叙述来宣告Internal Table, 可分成要不要有HEADER LINE, HEADER LINE
     是所谓的 WORK AREA, 用在数据的存取上.
     语法:
           DATA   OCCURS  [WITH HEADER LINE]
           Example:
                   DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
 
3.直接宣告, 不使用 WORK AREA
语法:
     DATA: BEGIN OF  OCCURS ,
             宣告>
            END OF .
 
 
   Example:
           DATA: BEGIN OF ITAB OCCURS 10,
                  COL1 TYPE I,
                  COL2 TYPE I,
                 END OF ITAB.
                 如此产生的Internal Table 不会有 Work Area, 也就是宣告时不会 Reference
                 其它的 Conponent 宣告
 
&Append Line
   语法:
        APPEND [] TO [Initial Line To] 
        [Initial Line To] 为增加一预设初值的元素
        Example: 使用 Work Area
                DATA:  BEGIN OF LINE,
                         COL1 TYPE I,
                         COL2 TYPE I,
                         END OF LINE.
                DATA ITAB LIKE LINE OCCURS 10.
                DO 2 TIMES.
                   LINE-COL1 = SY-INDEX.      “SY-INDEX为迥圈的 Counter
                   LINE-COL2 = SY-INDEX **2.
                   APPEND LINE INTO ITAB.             “新增至 Internal Table
                ENDDO.
                LOOP AT ITAB INTO LINE.   “ITAB 总共有两个元素
                   WRITE: / LINE-COL1,LINE-COL2.
                ENDLOOP.
                执行结果为:
                    1       1
                    2         4
 
        Example: 不使用 Work Area
                 DATA: BEGIN OF ITAB OCCURS 10,
                         COL1 TYPE I,
                         COL2 TYPE I,
                         END OF ITAB.
                DO 2 TIMES.
                   ITAB-COL1 = SY-INDEX.
                   ITAB-COL2 = SY-INDEX **2.
                   APPEND ITAB.             “新增至 Internal Table
                ENDDO.
                LOOP AT ITAB.   “ITAB 总共有两个元素
                   WRITE: / ITAB-COL1,ITAB-COL2.
                ENDLOOP.
                执行结果为:
                    1       1
                    2         4
 
&加入另一Internal Table的元素
  语法:
         APPEND LINES OF  [FROM ] [TO ] TO 
         的元素加入至, 可选取自的范围
         Example:
                  APPEND LINES OF ITAB TO JTAB.
                  ITAB所有元素加入JTAB
 
&Collect Line
   在加入新元素时将有相同standard key(非数值字段)的数值字段汇总
   语法:
        COLLECT [ INTO] 
 
       Example:
        DATA: BEGIN OF ITAB OCCURS 3,
               COL1(3) TYPE C,
               COL2    TYPE I,
              END OF ITAB.
              ITAB-COL1 = ‘ABC’. ITAB –COL2 = 10.
              COLLECT ITAB.
 
              ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20.
             COLLECT ITAB.
 
             ITAB-COL1 = ‘ABC’.   ITAB-COL2 = 30.
             COLLECT ITAB.    “汇总COL2 COL1=ABC 的元素上
             LOOP AT ITAB.
                WRITE: / ITAB-COL1,ITAB-COL2.
             ENDLOOP.
             执行结果:
                ABC      40
                XYZ      20
 
&__insert Line
   插入元素在指定的Internal Table位置之前
   语法:
         __insert [ INTO] [INITIAL LINE INTO]  [INDEX ]
        
         Example:
                  DATA: BEGIN OF LINE,
                           COL1 TYPE I,
                           COL2 TYPE I,
                           END OF LINE.
                  DATA ITAB LIKE LINE OCCURS 10.
                  DO 3 TIMES.
                     LINE-COL1 = SY-INDEX *10.
                     LINE-COL2 = SY-INDEX *20.
                     APPEND LINE INTO ITAB.
                  ENDDO.
                  LINE-COL1=100.
                  LINE-COL2=200.
                  __insert LINE INTO ITAB INDEX 2. “插入在位置2之前
                  LOOP AT ITAB INTO LINE.
                    WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. “SY-TABIXTable位置
                 ENDLOOP.
                执行结果:
                            1        10       20
                            2       100      200 “插入的元素
                            3        20       40
                            4        30       60
 
&插入另一Internal Table元素
   语法:
         __insert LINES OF  [FROM TO ] TO  INDEX
        的元素插入至, 位置在 之前, 可选取自的范围
         Example:
                  APPEND LINES OF ITAB TO JTAB INDEX 3.
                  ITAB所有元素插入JTAB, 位置在第三个元素之前
 
&Internal Table元素数据的读取
   语法:
         LOOP AT  [INTO ] [FROM TO ] [WHERE ]
           
         ENDLOOP.
         根据设定的范围选取原素资料, 读完后自动移往下一笔
         Example:
                  LOOP AT  ITAB INTO LINE WHERE COL1 >100.
                     WRITE: / SY-TABIX,LINE-COL1.
                  ENDLOOP.
                  仅读取 COL1 > 100 的元素
 
&读取Internal Table指定位置的元素
   语法:
         READ TABLE  [INTO ] INDEX 
         自指定位置 读取元素数据
         Example:
                   READ TABLE ITAB INTO LINE INDEX 5
                   读取 ITAB的第5个元素数据, 放入 LINE的字段中
 
&根据字段内容寻找
   语法:
          READ TABLE  INTO 
          Example:
                  ITAB-COL1 = ‘ABC’.
                  READ TABLE ITAB INTO LINE.
                  找出ITAB 中 COL1 字段内容是 ABC 的元素, 找到的值放入 LINE 中
                  若找到 SY-SUBRC传回0, 找不到则传回 4, 必须宣告有 work area
&异动元素内容
   语法:
         MODIFY  [FROM ] [INDEX ] [TRANSPORTING ]
                   [WHERE ]
         TRANSPORTING  .. : 指定异动的字段名称
         Example:
                 LINE-COL1 = 4.
                 LINE-COL2 = 100.
                 MODIFY ITAB FROM LINE.
                 将目前位置元素以LINE的内容异动
         Example:
                 LINE-COL1 = 10.
                 MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1.
                 将第三个元素的COL1字段异动为 10
 
&__delete Lines
  删除Internal Table 的元素
  语法:
        __delete  INDEX 
        Example:
                 __delete ITAB INDEX 4
                 删除第四个元素
  加上删除条件:
        __delete  [FROM TO ] [WHERE
        Example:
                 __delete ITAB FROM 3 TO 10.
                 删除第3至第10个元素
  
&Internal Table Sorting
  语法:
        SORT  [] [BY ] ….
        [] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表 ASCENDING
        :为指定的字段
        Example:
                 SORT ITAB DESCENDING BY COL2.
                 将 ITAB 根据 COL2字段递减排序
&计算数值字段总和
   语法:
         SUM
         计算得总和存在work area 中, 但只能存在 LOOP 叙述中
         Example:
                  LOOP AT ITAB INTO LINE.
                    SUM.
                  ENDLOOP.
                  WRITE: / LINE-COL1,LINE-COL2.
                  LINE-COL1 和 LINE-COL2 存数值总和
 
&Initial Table
1.REFRESH 
使用在没有 HEADER LINE 的 Internal Table中, 清除所有元素
     Example:
              REFRESH ITAB.
 
2. CLEAR [ ]
使用在有 HEADER LINE 的 Internal Table中, 清除所有元素
     Example:
              CLEAR ITAB[ ].
 
3.FREE 
释放(Release) Internal Table所占的内存空间, 用在 REFRESH和 CLEAR指令之后
Example:
        FREE ITAB. 
原创粉丝点击