内部テーブルの行数を取得するには?ループさせればいいのだろう。でも、もっとまともな方法があるはずだ。
違いがあるかどうかわかりませんが、このコードは4.6cで動作するはずです。
推奨の横。
DESCRIBE TABLE <itab-Name> LINES <variable>
システム変数「SY-TFILL」もあります。
ドキュメントから:
ステートメントDESCRIBE TABLE、LOOP AT、およびREAD TABLEの後、アクセスされた内部テーブルの行数。
例:
REPORT ytest.
DATA pf_exclude TYPE TABLE OF sy-ucomm WITH HEADER LINE.
START-OF-SELECTION.
APPEND '1' TO pf_exclude.
APPEND '2' TO pf_exclude.
APPEND '3' TO pf_exclude.
APPEND '4' TO pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill.
DESCRIBE TABLE pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill, 'after describe table'.
sy-tfill = 0. "Reset
READ TABLE pf_exclude INDEX 1 TRANSPORTING NO FIELDS.
WRITE: / 'sy-tfill = ', sy-tfill, 'after read table'.
sy-tfill = 0. "Reset
LOOP AT pf_exclude.
WRITE: / 'sy-tfill = ', sy-tfill, 'in loop with', pf_exclude.
sy-tfill = 0. "Reset
ENDLOOP.
結果:
sy-tfill = 0
sy-tfill = 4 after describe tabl
sy-tfill = 4 after read table
sy-tfill = 4 in loop with 1
sy-tfill = 0 in loop with 2
sy-tfill = 0 in loop with 3
sy-tfill = 0 in loop with 4
2番目のエントリの値0に注意してください。「SY-TFILL」は、最初のループの後にのみ、各ステップで更新されません。
READ
(1)の直後に必要な場合は、SY-TFILLの使用をお勧めします。.. READ
とSY-TFILLの使用の間に他のコマンドがある場合、システム変数が変更される危険が常にあります。
(1)または表を説明します。
DATA : V_LINES TYPE I. "declare variable
DESCRIBE TABLE <ITAB> LINES V_LINES. "get no of rows
WRITE:/ V_LINES. "display no of rows
参考文献: http://www.sapnuts.com/courses/core-abap/internal-table-work-area.html。
ご質問の内容を正しく理解すれば、内部テーブルに対する条件ループ中に行番号を知りたいということですね。 内部テーブルを扱う場合、システム変数sy-tabixを使用することができます。より詳細な情報が必要であれば、ABAPドキュメントを参照してください(特に内部テーブル処理の章)。
例
LOOP AT itab INTO workarea
WHERE tablefield = value.
WRITE: 'This is row number ', sy-tabix.
ENDLOOP.
そのような結果にはSAPパラメーターはないと思います。 以下のコードが配信されますが。
LOOP AT intTab.
AT END OF value.
result = sy-tabix.
write result.
ENDAT.
ENDLOOP.