38

如何获取内部表的行数?我想我可以循环播放它。但必须有一个更理智的方法。

我不知道它是否有区别,但代码应该在 4.6c 版本上运行。

4

9 回答 9

93

此任务还有一个内置函数:

variable = lines( itab_name ).

就像IronGoofy描述的“纯”ABAP 语法一样,函数“lines()”将表 itab_name 的行数写入变量中。

于 2009-01-05T00:03:04.053 回答
56

您可以使用以下功能:

 DESCRIBE TABLE <itab-Name> LINES <variable>

调用后,变量包含内部表的行数。

于 2008-12-26T22:34:51.533 回答
14

除了推荐

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

请注意第二个条目的值 0:SY-TFILL不会随每一步更新,仅在第一个循环之后。

我只推荐使用SY-TFILL,如果你需要在READ(1)之后直接READ使用...

(1) 或描述表。

于 2015-09-18T11:44:12.650 回答
3
  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

于 2014-02-06T05:42:07.247 回答
0

功能模块 EM_GET_NUMBER_OF_ENTRIES 也将提供行数。它需要 1 个参数 - 表名。

于 2017-08-30T12:04:57.620 回答
-1

您还可以使用 OPEN Sql 使用 COUNT 分组子句查找行数,并且还有系统字段 SY-LINCT 来计算表的行数(ROWS)。

于 2013-11-29T11:04:00.890 回答
-2

如果我正确理解您的问题,您想知道内部表的条件循环期间的行号。如果您使用内部表,则可以使用系统变量 sy-tabix。如果您需要更多信息,请参阅 ABAP 文档(尤其是关于内部表处理的章节)。

例子:

LOOP AT itab INTO workarea
        WHERE tablefield = value.

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

ENDLOOP.
于 2009-03-07T10:05:45.390 回答
-2
data: vcnt(4).

clear vcnt.

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

答案将是3. (vcnt = 3).

于 2011-11-24T16:26:57.360 回答
-3

我认为这种结果没有 SAP 参数。虽然下面的代码会交付。

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.
于 2011-04-22T20:45:57.260 回答