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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值