英文:
Clearing rows of dynamic internal table with empty value in one column
问题
我正在尝试删除具有一个名为 segment
的列中为空值的行。该表是动态声明的,因此我无法像以前一样在DATA声明中使用标准类型(如DATA table_x TYPE BSEG
)。
我尝试创建一个基于导入表的结构,但是我收到了一个错误消息:
> 数据对象“LS_DYN_TABLE”没有结构,因此没有名为“SEGMENT”的组件。
是否有一种动态声明结构的方式,以便我可以循环遍历表格,删除行并将过滤后的表格传递给其他地方?
DATA:
dy_table TYPE REF TO data.
FIELD-SYMBOLS:
<dyn_table> TYPE STANDARD TABLE,
<fs_segment> TYPE any.
IF ID = '1234'.
me->method_that_import_desired_table( IMPORTING et_table = dy_table ).
ASSIGN dy_table->* TO <dyn_table>.
DATA(ls_dyn_table) = dy_table.
LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_row>).
IF ls_dyn_table-segment IS INITIAL.
CONTINUE.
ENDIF.
ENDLOOP.
ENDIF.
英文:
I am trying to remove rows that have empty values in one column segment
. The table is declared dynamically so it does not have a standard type that I can use in DATA declaration like I used to do (DATA table_x TYPE BSEG
).
I tried to create structure based of the imported table but I receive an error:
> The data object "LS_DYN_TABLE" does not have a structure and therefore does not have a component called "SEGMENT"
Is there any way to declare dynamically a structure so I can loop through a table, remove rows and pass filtered table further?
DATA:
dy_table TYPE REF TO data.
FIELD-SYMBOLS:
<dyn_table> TYPE STANDARD TABLE,
<fs_segment> TYPE any.
IF ID = '1234'.
me->method_that_import_desired_table( IMPORTING et_table = dy_table ).
ASSIGN dy_table->* TO <dyn_table>.
DATA(ls_dyn_table) = dy_table.
LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_row>).
IF ls_dyn_table-segment IS INITIAL.
CONTINUE.
ENDIF.
ENDLOOP.
ENDIF.
答案1
得分: 0
在循环内部表时,您必须动态分配字段段并检查它是否具有值:
LOOP AT <dyn_table>
ASSIGNING FIELD-SYMBOL(<fs_row>).
DATA(tabix) = sy-tabix. "注意内部表中的行索引
ASSIGN COMPONENT 'SEGMENT'
OF STRUCTURE <fs_row>
TO FIELD-SYMBOL(<segment>).
IF sy-subrc EQ 0 AND
<segment> IS INITIAL.
DELETE <dyn_table> INDEX tabix. "按行索引删除
ENDIF.
ENDLOOP.
英文:
When you loop the internal table, you have to assign the field segment dynamically and check if it has a value:
LOOP AT <dyn_table>
ASSIGNING FIELD-SYMBOL(<fs_row>).
DATA(tabix) = sy-tabix. "note row index in internal table
ASSIGN COMPONENT 'SEGMENT'
OF STRUCTURE <fs_row>
TO FIELD-SYMBOL(<segment>).
IF sy-subrc EQ 0 AND
<segment> IS INITIAL.
DELETE <dyn_table> INDEX tabix. "delete by row index
ENDIF.
ENDLOOP.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论