有表頭行與無表頭行的內表在模組化中的應用(ABAP)
PROGRAM SAPMZTST.
TYPES: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA: ITAB TYPE LINE OCCURS 10 WITH HEADER LINE,
JTAB TYPE LINE OCCURS 10.
PERFORM FILL TABLES ITAB.
MOVE ITAB[] TO JTAB.
PERFORM OUT TABLES JTAB.
FORM FILL TABLES F_ITAB LIKE ITAB[].
DO 3 TIMES.
F_ITAB-COL1 = SY-INDEX.
F_ITAB-COL2 = SY-INDEX ** 2.
APPEND F_ITAB.
ENDDO.
ENDFORM.
FORM OUT TABLES F_ITAB LIKE JTAB.
LOOP AT F_ITAB.
WRITE: / F_ITAB-COL1, F_ITAB-COL2.
ENDLOOP.
ENDFORM.
啟動 SAPMZTST 後,輸出如 下:
1 1
2 4
3 9
詳細解釋:WITH HEADER LINE 指明瞭ITAB要帶表頭行,
先解釋下表頭行的作用吧:
內表是按行 進行訪問的 。必須使用 某個工作區 域作為與表 格互相傳輸 資料的介面 。在先前的
學習中我們都又看見這樣一個訪問內表的句子: LOOP AT F_ITAB INTO F_LINE. F_LINE就是
這樣一個介面。那麼如果有表頭行的話,你就可以省略F_LINE,直接LOOP AT F_ITAB,因為表頭行就
是這樣一個系統幫你建立的一個表格工作區域(只要你宣告時加上WITH HEADER LINE ),那ITAB[]
中的[]是用來做什麼的?這個其實是因為如果在語句中使用內表名稱,系統將其解釋為表格工作區域
的名稱,也就是ITAB其實代表 表頭行、表格工作區域、訪問內表的介面。這樣應該理解了吧。有表
頭行的內表在運用時要帶個中括號,這樣才是我們平時用的內表
重點理解:FORM OUT TABLES F_ITAB LIKE JTAB.
請注意,在這種情況下, 將無表頭行 的實表格傳遞給有表頭行的形式表 格,並在子程式中使用了表格工作域 F_ITAB。
這是因為如果傳遞無表頭行的內表,則在子程式中自動建立作為區域性資料物件的表頭行,也就是說F_ITAB是帶表頭行的,所以LOOP AT F_ITAB.的後面不用指明表格工作區域