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

内部テーブルの行数を取得するには?ループさせればいいのだろう。でも、もっとまともな方法があるはずだ。

違いがあるかどうかわかりませんが、このコードは4.6cで動作するはずです。

このタスクのための組み込み関数もある:

variable = lines( itab_name ).

IronGoofy]1で説明されている純粋なABAP構文と同様に、関数"lines( )"はテーブルitab_nameの行数を変数に書き込みます。

解説 (1)
ソリューション

以下の機能を使うことができる:

 DESCRIBE TABLE  LINES 

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

解説 (0)

推奨の横。

DESCRIBE TABLE  LINES 

システム変数「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)または表を説明します。

解説 (0)
  DATA : V_LINES TYPE I. "declare variable
  DESCRIBE TABLE  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

解説 (0)

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

解説 (0)

OPEN Sqlを使用して、COUNTグループ化句を使用して行数を見つけることもできます。また、テーブルの行(ROWS)をカウントするシステムフィールドSY-LINCTもあります。

解説 (3)
data: vcnt(4).

clear vcnt.

LOOP at itab WHERE value = '1'.
  add 1 to vcnt.
ENDLOOP.

答えは「3」になります。 (vcnt = 3)。`。

解説 (1)

ご質問の内容を正しく理解すれば、内部テーブルに対する条件ループ中に行番号を知りたいということですね。 内部テーブルを扱う場合、システム変数sy-tabixを使用することができます。より詳細な情報が必要であれば、ABAPドキュメントを参照してください(特に内部テーブル処理の章)。

LOOP AT itab INTO workarea
        WHERE tablefield = value.

     WRITE: 'This is row number ', sy-tabix.

ENDLOOP.
解説 (1)

そのような結果にはSAPパラメーターはないと思います。 以下のコードが配信されますが。

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.
解説 (1)