用abap實現內表的行列轉換-原始碼2 (轉)

sapkitty發表於2007-04-14

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部落格 ” ,連結:http://blog.itpub.net/8214011/viewspace-910675/,如需轉載,請註明出處,否則將追究法律責任。

相關文章