web-dev-qa-db-ja.com

abapで内部テーブルの行数を取得する方法は?

内部テーブルの行数を取得するにはどうすればよいですか?ループできると思います。しかし、賢い方法がなければなりません。

違いがあるかどうかはわかりませんが、コードは4.6cバージョンで実行する必要があります。

32
Igal Serban

次の機能を使用できます。

 DESCRIBE TABLE <itab-Name> LINES <variable>

呼び出し後、変数には内部テーブルの行数が含まれます。

48
Thorsten

このタスクには組み込み関数もあります。

variable = lines( itab_name ).

IronGoofy で記述される「純粋な」ABAP構文と同様に、関数「lines()」はテーブルitab_nameの行数を変数に書き込みます。

70
user51478

推奨の横に

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)またはテーブルの説明。

10
knut
  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

3

機能モジュールEM_GET_NUMBER_OF_ENTRIESも行数を提供します。 1つのパラメーター(テーブル名)が必要です。

0