对internal table的操作详解编程语言

&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. 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/19992.html

(0)
上一篇 2021年7月19日 22:57
下一篇 2021年7月19日 22:57

相关推荐

发表回复

登录后才能评论