ITPub博客

首页 > 应用开发 > IT综合 > 用abap实现内表的行列转换-源代码2 (转)

用abap实现内表的行列转换-源代码2 (转)

原创 IT综合 作者:sapkitty 时间:2007-04-14 21:45:29 0 删除 编辑

source is as follows

[@more@]

用abap实现内表的行列转换-源代码2

源代码2

****向第一行加一个空数据,有几个不同的num就加几个

RTAB2-NUM = '' .

APPEND RTAB2 TO ITAB2 .

****有几个相同的num就加几个

DO L_NUM TIMES .

RTAB2-NUM = RTAB1-NUM .

APPEND RTAB2 TO ITAB2 .

ENDDO .

ENDAT .

ENDLOOP .

***初始化行列数

L_H = '0' .

L_V = '1' .

L_CY = '0' .

***处理开始了

LOOP AT ITAB1 INTO RTAB1 .

APPEND RTAB1 TO ITAB1_TEMP .

AT END OF NUM .

****相同的num作为一个组处理

DESCRIBE TABLE ITAB1_TEMP LINES L_X .

DO L_COUN TIMES .

L_INDEX = L_INDEX + 1 .

******准备修改的表数据

READ TABLE ITAB2 ASSIGNING INDEX L_INDEX .

DO L_X TIMES .

********取得要修改的元素

CONCATENATE '-' L_H INTO L_TEMP .

ASSIGN (L_TEMP) TO .

READ TABLE ITAB1_TEMP ASSIGNING INDEX L_V .

CONCATENATE '-' L_CY INTO L_TEMP .

ASSIGN (L_TEMP) TO .

********修改完成

= .

********行列累加

L_H = L_H + 1 .

L_V = L_V + 1 .

ENDDO .

******列累加,再初始化,继续处理下一列

L_CY = L_CY + 1 .

L_H = '0' .

L_V = '1' .

ENDDO .

****记得要清空临时表

CLEAR: ITAB1_TEMP[],ITAB1_TEMP .

ENDAT .

**重置列名

L_CY = '0' .

ENDLOOP .

***上面转置好了,下面整理一下表

**取得第一行的数据

READ TABLE ITAB2 ASSIGNING INDEX 1 .

LOOP AT ITAB2 INTO RTAB2 .

***如果下面有比第一行多的数据,把多的给第一行

IF SY-TABIX <> 1 AND RTAB2-NUM = '' .

IF >= RTAB2 .

DELETE ITAB2 INDEX SY-TABIX .

ELSE .

= RTAB2 .

DELETE ITAB2 INDEX SY-TABIX .

ENDIF.

ENDIF.

ENDLOOP .

***打印出来看看吧

LOOP AT ITAB2 INTO RTAB2 .

WRITE: / RTAB2-NUM ,RTAB2-0 ,RTAB2-1,RTAB2-2 ,RTAB2-3,RTAB2-4,RTAB2-5,

RTAB2-6,RTAB2-7,RTAB2-8,RTAB2-9 .

ENDLOOP .

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8214011/viewspace-910675/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: checkbox & listbox
请登录后发表评论 登录
全部评论

注册时间:2008-08-04

  • 博文量
    62
  • 访问量
    213948