[转帖]ABAP实践学习-内表的常用处理
来源:互联网 发布:域名注册需要实名吗 编辑:程序博客网 时间:2024/06/06 00:24
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.
- [转帖]ABAP实践学习-内表的常用处理
- [转帖]ABAP实践学习-内表的常用处理
- [转帖]ABAP实践学习--将excel表读入ABAP内表
- [转帖]ABAP实践学习--BDC批量输入写成内表程序
- ABAP内表常用操作
- ABAP 中关键字TABLE在处理内表的作用
- ABAP内表的表头
- ABAP-内表的创建
- ABAP实践学习--灰色的ALV显示
- ABAP学习笔记之三-内表
- ABAP实践学习-现金日记表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发的第一步, 先说说ABAP内表
- ABAP开发常用的表
- [转帖]ABAP实践学习--BDC批量输入写成内表程序
- 2007-6-27 开始学Linux,装了个虚拟机和桌面版的 red hat 9.0
- [转帖]ABAP实践学习--将excel表读入ABAP内表
- [转帖]ABAP实践学习--ABAP中将SAP数据按格式保存到EXCEL(OLE)
- 开源WebGIS平台
- [转帖]ABAP实践学习-内表的常用处理
- 使用apache模块rewrite_module
- asp.net 2.0 的数据库的连接类(通过配置文件读连接串)
- 简单统计postfix发送人记录的脚本
- Oracle语句优化规则
- vc如何让打开的子窗口默认是最大化的
- clientHeight、offsetHeight和scrollHeight http://www.cftea.com/c/751.asp
- 一步一步学写makefile (一)
- offsetTop、offsetLeft、offsetWidth、offsetHeight http://www.cftea.com/c/2006/12/PCTKER6T0V62S854.asp