首页 文章

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

提问于
浏览
30

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

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

9 回答

  • 0

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

    variable = lines( itab_name ).
    

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

  • 66

    您可以使用以下功能:

    DESCRIBE TABLE <itab-Name> LINES <variable>
    

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

  • -3

    除了推荐

    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
    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

  • 45

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

  • -2

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

  • -1

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

    例:

    LOOP AT itab INTO workarea
            WHERE tablefield = value.
    
         WRITE: 'This is row number ', sy-tabix.
    
    ENDLOOP.
    
  • -2
    data: vcnt(4).
    
    clear vcnt.
    
    LOOP at itab WHERE value = '1'.
      add 1 to vcnt.
    ENDLOOP.
    

    答案是 3. (vcnt = 3).

  • 9

    我认为这种结果没有SAP参数 . 虽然下面的代码将提供 .

    LOOP AT intTab.
    
      AT END OF value.
    
        result = sy-tabix.
    
        write result.  
    
      ENDAT.
    
    ENDLOOP.
    

相关问题