如何获取内部表的行数?我想我可以循环播放它。但必须有一个更健全的方式。
我不知道它是否有所作为,但代码应该在4.6c版本上运行。
答案 0 :(得分:68)
此任务还有一个内置函数:
variable = lines( itab_name ).
就像IronGoofy描述的“纯粹”ABAP语法一样,函数“lines()”将表itab_name的行数写入变量。
答案 1 :(得分:47)
您可以使用以下功能:
DESCRIBE TABLE <itab-Name> LINES <variable>
调用之后,变量包含内部表的行数。
答案 2 :(得分:10)
除了推荐的
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
和SY-TFILL的使用之间还有其他命令,总是存在改变系统变量的危险。
(1)或描述表。
答案 3 :(得分: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
Refreance: http://www.sapnuts.com/courses/core-abap/internal-table-work-area.html
答案 4 :(得分:0)
功能模块EM_GET_NUMBER_OF_ENTRIES也将提供行计数。它需要1个参数 - 表名。
答案 5 :(得分:-1)
你也可以使用OPEN Sql来查找使用COUNT Grouping子句的行数,还有系统字段SY-LINCT来计算表格的行数(ROWS)。
答案 6 :(得分:-2)
如果我正确理解了您的问题,您希望在内部表的条件循环期间知道行号。 如果使用内部表,则可以使用系统变量sy-tabix。如果您需要更多信息,请参阅ABAP文档(特别是关于internal table processing的章节)。
示例:
LOOP AT itab INTO workarea
WHERE tablefield = value.
WRITE: 'This is row number ', sy-tabix.
ENDLOOP.
答案 7 :(得分:-2)
data: vcnt(4).
clear vcnt.
LOOP at itab WHERE value = '1'.
add 1 to vcnt.
ENDLOOP.
答案是3. (vcnt = 3).
答案 8 :(得分:-3)
我认为这种结果没有SAP参数。虽然下面的代码会传递。
LOOP AT intTab.
AT END OF value.
result = sy-tabix.
write result.
ENDAT.
ENDLOOP.