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