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

Iga*_*ban 33 sap abap

如何获取内部表的行数?我想我可以循环播放它.但必须有一个更健全的方式.

我不知道它是否有所作为,但代码应该在4.6c版本上运行.

小智 74

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

variable = lines( itab_name ).
Run Code Online (Sandbox Code Playgroud)

就像IronGoofy描述的"纯粹"ABAP语法一样,函数"lines()"将表itab_name的行数写入变量.

  • 由于您可以将其用作内联操作,因此它远优于`describe`。例如:`if lines(itab)>0。itab [1] -text ='土豆'。endif.`或`coeff = lines(lt_relevant)/ lines(lt_all)`。 (4认同)

Tho*_*ten 48

您可以使用以下功能:

 DESCRIBE TABLE <itab-Name> LINES <variable>
Run Code Online (Sandbox Code Playgroud)

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


knu*_*nut 10

除了推荐

DESCRIBE TABLE <itab-Name> LINES <variable>
Run Code Online (Sandbox Code Playgroud)

还有系统变量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.
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

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

我建议仅使用SY-TFILL,如果您需要在READ(1)之后直接使用...如果在READSY-TFILL的使用和使用之间还有其他命令,则总是存在系统变量更改的危险.

(1)或描述表.