内表的操作(3)

2018-11-22 21:34

END OF wa.

*下边定义了一个内表itab,(no work area, no header line) DATA itab LIKE standard TABLE OF wa with header line. DO 3 TIMES.

wa-col1 = sy-index. wa-col2 = sy-index ** 2. APPEND wa TO itab. ENDDO.

LOOP AT itab INTO wa.

WRITE: / wa-col1, wa-col2. ENDLOOP.

itab-col1 = 'x'. itab-col2 = 100.

*refresh和free一样都只是清空内表中数据,而不清工作区 refresh itab.

*free itab只是清空了内表中数据,没清空工作取中数据 *free itab.

*用if itab is not initial来判别内表工作区是否为空 if itab is not initial.

write / 'itab is not empty'. endif.

*if itab[] is initial来判别内表是否为空 if itab[] is initial.

write / 'itab[] is empty'. endif.

write: / itab-col1,itab-col2.

对内表操作: 内表的整体赋值:

如果想一次 将内表的全 部内容复制 到另一内表 中,请使用 MOVE 语句或赋值 操作符 (=),用 法如下:

MOVE TO .

该语句等价 于:

= .

也可进行多 重赋值,例 如,

= = = .

report:zdz.

DATA: BEGIN OF LINE, COL1, COL2, END OF LINE.

DATA ETAB LIKE LINE OCCURS 10 WITH HEADER LINE. DATA FTAB LIKE LINE OCCURS 10. LINE-COL1 = 'A'. LINE-COL2 = 'B'. APPEND LINE TO ETAB.

*因为ETAB是带表头行的,所以ETAB[]才是内表,ETAB是工作区 *所以 MOVE ETAB TO FTAB.会报错(类型不匹配) MOVE ETAB[] TO FTAB. LOOP AT FTAB INTO LINE.

WRITE: / LINE-COL1, LINE-COL2. ENDLOOP. REPORT:ZDZ.

确定内表属 性

如果在处理 过程中想知 道内表一共 包含多少行 ,或者想知 道定义的 OCCURS 参数的大小 ,请使用 DESCRIBE 语句,

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE occurs 10. DATA: LIN TYPE I, OCC TYPE I.

DESCRIBE TABLE ITAB LINES LIN OCCURS OCC. WRITE: / LIN, OCC. DO 1000 TIMES.

LINE-COL1 = SY-INDEX.

LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

DESCRIBE TABLE ITAB LINES LIN OCCURS OCC. WRITE: / LIN, OCC.

用 MODIFY 更改行:

1. 如果使用 INDEX 选项,则新 行代替索引 为 的现有行。

REPORT:ZDZ.

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.

LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

LINE-COL1 = 10. LINE-COL2 = 10 ** 2 . MODIFY ITAB FROM LINE INDEX 2. LOOP AT ITAB INTO LINE.

WRITE: / SY-TABIX, LINE-COL1, LINE-COL2. ENDLOOP.

2. 如果使用没 有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块

中通过更 改当前行( 例如由 SY-TABIX 返回其索引 的行)来处 理它。

REPORT:ZDZ.

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

*sy-index 为循环中,当前通过的编号 DO 3 TIMES.

LINE-COL1 = SY-INDEX.

LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

*sy-tabix内表的索引 LOOP AT ITAB INTO LINE. IF SY-TABIX = 2.

LINE-COL1 = SY-TABIX * 10.

LINE-COL2 = ( SY-TABIX * 10 ) ** 2 . MODIFY ITAB FROM LINE. ENDIF. ENDLOOP.

LOOP AT ITAB INTO LINE.

WRITE: / SY-TABIX, LINE-COL1, LINE-COL2. ENDLOOP.

用 WRITE TO 更改行

REPORT:ZDZ.

DATA CODE(72) OCCURS 10 WITH HEADER LINE. CODE = 'This is the first line.'. APPEND CODE.

CODE = 'This is the second line. It is ugly.'. APPEND CODE.

CODE = 'This is the third and final line.'. APPEND CODE.

WRITE 'nice' TO CODE+31 INDEX 2. LOOP AT CODE. WRITE / CODE. ENDLOOP.

在循环中删 除行

REPORT:ZDZ.

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10. DO 30 TIMES.

LINE-COL1 = SY-INDEX.

LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

LOOP AT ITAB INTO LINE. IF LINE-COL1 < 28. DELETE ITAB. ENDIF. ENDLOOP.

LOOP AT ITAB INTO LINE.

WRITE: / SY-TABIX, LINE-COL1, LINE-COL2. ENDLOOP.

用索引删除 行

REPORT:ZDZ.

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10. DO 5 TIMES.

LINE-COL1 = SY-INDEX.

LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO.

DELETE ITAB INDEX: 2, 3, 4.

*SY-SUBRC返回值为4,说明删除不成功 *第一次删除第二行成功,一共剩四行 *第二次删除第三行成功,一共剩三行

*第三次删除第四行失败,因为一共就三行了. WRITE: 'SY-SUBRC',SY-SUBRC. LOOP AT ITAB INTO LINE.

WRITE: / SY-TABIX, LINE-COL1, LINE-COL2. ENDLOOP.

删除邻近的 重复条目

REPORT:ZDZ.

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE C, END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB. LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB. LINE-COL1 = 1. LINE-COL2 = 'B'. APPEND LINE TO ITAB. LINE-COL1 = 2. LINE-COL2 = 'B'. APPEND LINE TO ITAB. LINE-COL1 = 3. LINE-COL2 = 'B'. APPEND LINE TO ITAB. LINE-COL1 = 4. LINE-COL2 = 'B'. APPEND LINE TO ITAB. LINE-COL1 = 5. LINE-COL2 = 'A'. APPEND LINE TO ITAB. LOOP AT ITAB INTO LINE.

WRITE: / LINE-COL1, LINE-COL2. ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS. SKIP TO LINE 3.

LOOP AT ITAB INTO LINE.

WRITE: /14 LINE-COL1, LINE-COL2. ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING COL1. SKIP TO LINE 3.

LOOP AT ITAB INTO LINE.

WRITE: /28 LINE-COL1, LINE-COL2. ENDLOOP.


内表的操作(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Java语言程序设计习题答案(清华大学出版杜)张思民版-1-12章答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: