如何在abap中获取内部表的行数?

如何在abap中获取内部表的行数?,abap,Abap,如何获取内部表的行数?我想我可以在上面循环。但一定有更理智的方法 我不知道这是否有区别,但代码应该在4.6c版本上运行。您可以使用以下功能: DESCRIBE TABLE <itab-Name> LINES <variable> 描述表格行 调用后,变量包含内部表的行数。此任务还有一个内置函数: variable = lines( itab_name ). 与所描述的“纯”ABAP语法一样,函数“lines()”将表itab_name的行数写入变量。如果我正确理解

如何获取内部表的行数?我想我可以在上面循环。但一定有更理智的方法


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

您可以使用以下功能:

 DESCRIBE TABLE <itab-Name> LINES <variable>
描述表格行

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

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

variable = lines( itab_name ).

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

如果我正确理解您的问题,您希望在内部表的条件循环期间知道行号。 如果使用内部表,则可以使用系统变量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.

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

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

数据:V_lines TYPE I.“声明变量
  DATA : V_LINES TYPE I. "declare variable
  DESCRIBE TABLE <ITAB> LINES V_LINES. "get no of rows
  WRITE:/ V_LINES. "display no of rows
描述表格行V_行。“获取行数 写入:/V\u行。“显示行数
参考:

在推荐的

DESCRIBE TABLE <itab-Name> LINES <variable>
结果是:

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,如果您需要在读取SY-TFILL(1)之后直接使用SY-TFILL。如果在读取SY-TFILL和使用SY-TFILL之间有其他命令,则系统变量始终存在更改的危险


(一)或描述表格。

功能模块EM_GET_NUMBER_OF_ENTRIES也将提供行计数。它使用1个参数-表格名称。

仔细使用sy tabix,每次调用循环、读取表格时都会更新它……有时它可能会有一个意外值。-1,这是CPU密集型的,比使用
描述
更糟糕de>lines()
-1,这是CPU密集型的,比使用
Descripte
lines()
糟糕得多。伙计们,内部表(根据问题)不是数据库表。计数用于计算数据库表中的行数(因此与问题无关)。由于可以用作内联操作,因此此操作远远优于
descripe
。例如:
If-lines(itab)>0.itab[1]-text='Potato'。endif.
coeff=行(lt\u相关)/行(lt\u全部)
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