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

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-TABIX Table 位置
                 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. 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值