SAP

SAP 内表2008-11-27 22:531.内表的声明
Internal Table 的宣告
    ABAP/4的 Internal Table 如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功 
    能.
    1.使用 TYPE 叙述
   语法:
         TYPES   <t>   <type>   OCCURS   <n>
         宣告一个数组 <t>, 型态为 <type>, 长度为 <n>
         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   <f>   <type>   OCCURS   <n>   [WITH   HEADER   LINE]
            Example:
                    DATA   VECTOR   TYPE   I   OCCURS   10   WITH   HEADER   LINE.

3.直接宣告, 不使用 WORK AREA
语法:
      DATA: BEGIN   OF   <f>   OCCURS   <n>,
              <component 宣告>
             END   OF   <f>.


    Example:
            DATA: BEGIN   OF   ITAB   OCCURS   10,
                   COL1   TYPE   I,
                   COL2   TYPE   I,
                  END   OF   ITAB.
                  如此产生的Internal Table 不会有 Work Area, 也就是宣告时不会 Reference
                  其它的 Conponent 宣告

4.Append Line
    语法:
         APPEND   [<wa>]   TO   [Initial Line To]   <itab>
         [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
5.加入另一Internal Table的元素
    语法:
          APPEND   LINES   OF   <itab1>   [FROM <n1>] [TO <n2>]   TO   <itab2>
          将<itab1>的元素加入至<itab2>中, 可选取自<n1>至<n2>的范围
          Example:
                   APPEND   LINES   OF   ITAB   TO   JTAB.
                   将ITAB所有元素加入JTAB中

&Collect   Line
    在加入新元素时将有相同standard key(非数值字段)的数值字段汇总
    语法:
         COLLECT   [<wa>   INTO]   <itab>

        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   [<wa> INTO] [INITIAL   LINE   INTO]   <itab>   [INDEX   <idx>]
        
          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   <itab1>   [FROM <n1> TO <n2>]   TO   <itab2>   INDEX <idx>
         将<itab1>的元素插入至<itab2>中, 位置在 <idx>之前, 可选取自<n1>至<n2>的范围
          Example:
                   APPEND   LINES   OF   ITAB   TO   JTAB   INDEX   3.
                   将ITAB所有元素插入JTAB中, 位置在第三个元素之前

&Internal Table元素数据的读取
    语法:
          LOOP   AT   <itab>   [INTO <wa>] [FROM <n1> TO <n2>] [WHERE <condition>]
             <loop   expression>
          ENDLOOP.
          根据设定的范围选取原素资料, 读完后自动移往下一笔
          Example:
                   LOOP   AT   ITAB   INTO   LINE   WHERE   COL1 >100.
                      WRITE:   /   SY-TABIX,LINE-COL1.
                   ENDLOOP.
                   仅读取 COL1 > 100 的元素

&读取Internal Table指定位置的元素
    语法:
          READ   TABLE   <itab>   [INTO <wa>]   INDEX   <idx>
          自指定位置 <idx> 读取元素数据
          Example:
                    READ   TABLE   ITAB   INTO   LINE   INDEX   5
                    读取 ITAB的第5个元素数据, 放入 LINE的字段中

&根据字段内容寻找
    语法:
           READ   TABLE   <itab>   INTO   <wa>
           Example:
                   ITAB-COL1 = ‘ABC’.
                   READ   TABLE   ITAB   INTO   LINE.
                   找出ITAB 中 COL1 字段内容是 ABC 的元素, 找到的值放入 LINE 中
                   若找到 SY-SUBRC传回0, 找不到则传回 4, <itab>必须宣告有 work area
&异动元素内容
    语法:
          MODIFY   <itab>   [FROM <wa>] [INDEX <idx>] [TRANSPORTING <f1>…<f2>]
                    [WHERE <condition>]
          TRANSPORTING   <f1> ..<f2> : 指定异动的字段名称
          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   <itab>   INDEX   <idx>
         Example:
                  DELETE ITAB   INDEX   4
                  删除第四个元素
   加上删除条件:
         DELETE   <itab> [FROM <n1> TO <n2>]   [WHERE <condition>
         Example:
                  DELETE   ITAB   FROM   3   TO   10.
                  删除第3至第10个元素
  
&Internal Table Sorting
   语法:
         SORT   <itab>   [<order>]   [BY <f1>] ….
         [<order>] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表 ASCENDING
         <f1>:为指定的字段
         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   <itab>
使用在没有 HEADER LINE 的 Internal Table中, 清除所有元素
      Example:
               REFRESH   ITAB.
 
2. CLEAR   <itab>[ ]
使用在有 HEADER LINE 的 Internal Table中, 清除所有元素
      Example:
               CLEAR   ITAB[ ].

3. FREE   <itab>
释放(Release) Internal Table所占的内存空间, 用在 REFRESH和 CLEAR指令之后
Example:
         FREE   ITAB.

你可能感兴趣的:(数据结构)