我怎样获取内部表的行数?我猜可以通过循环来实现。但肯定有更简单的方法。
我不知道是否有差别,但代码应该在4.6c版本上运行。
这个任务还有一个内置函数:
variable = lines( itab_name ).
就像IronGoofy所描述的“纯”ABAP语法一样,函数“lines()”将表itab_name的行数写入变量中。
你可以使用以下函数:
DESCRIBE TABLE <itab-Name> LINES <variable>
在调用之后,变量包含内部表的行数。除了推荐的
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
仅在第一个循环后更新,而不是每一步更新。READ
(1)后直接使用SY-TFILL。如果READ
和使用SY-TFILL之间有其他命令,则始终存在更改系统变量的风险。 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
功能模块EM_GET_NUMBER_OF_ENTRIES还将提供行数。它需要1个参数-表名。
你也可以使用OPEN Sql语句来使用COUNT分组子句查找行数,此外还有系统字段SY-LINCT可用于计算表格的行数。
如果我正确理解你的问题,你想在一个条件循环中知道内部表的行号。
如果你使用内部表,你可以使用系统变量sy-tabix。如果你需要更多信息,请参考ABAP文档(特别是有关内部表处理的章节)。
示例:
LOOP AT itab INTO workarea
WHERE tablefield = value.
WRITE: 'This is row number ', sy-tabix.
ENDLOOP.
data: vcnt(4).
clear vcnt.
LOOP at itab WHERE value = '1'.
add 1 to vcnt.
ENDLOOP.
3. (vcnt = 3)。
我认为没有适用于这种结果的SAP参数。但是下面的代码可以实现。
LOOP AT intTab.
AT END OF value.
result = sy-tabix.
write result.
ENDAT.
ENDLOOP.
DESCRIBE
或 lines( )
更糟糕。 - tomdemuyt
如果行(itab)> 0,则 itab [1] -text ='Potato'。endif。
或coeff = lines(lt_relevant)/ lines(lt_all)
。 - Zero