清除动态内部表中某一列为空值的行。

huangapple go评论81阅读模式
英文:

Clearing rows of dynamic internal table with empty value in one column

问题

我正在尝试删除具有一个名为 segment 的列中为空值的行。该表是动态声明的,因此我无法像以前一样在DATA声明中使用标准类型(如DATA table_x TYPE BSEG)。

我尝试创建一个基于导入表的结构,但是我收到了一个错误消息:
> 数据对象“LS_DYN_TABLE”没有结构,因此没有名为“SEGMENT”的组件。

是否有一种动态声明结构的方式,以便我可以循环遍历表格,删除行并将过滤后的表格传递给其他地方?

  1. DATA:
  2. dy_table TYPE REF TO data.
  3. FIELD-SYMBOLS:
  4. <dyn_table> TYPE STANDARD TABLE,
  5. <fs_segment> TYPE any.
  6. IF ID = '1234'.
  7. me->method_that_import_desired_table( IMPORTING et_table = dy_table ).
  8. ASSIGN dy_table->* TO <dyn_table>.
  9. DATA(ls_dyn_table) = dy_table.
  10. LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_row>).
  11. IF ls_dyn_table-segment IS INITIAL.
  12. CONTINUE.
  13. ENDIF.
  14. ENDLOOP.
  15. 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?

  1. DATA:
  2. dy_table TYPE REF TO data.
  3. FIELD-SYMBOLS:
  4. &lt;dyn_table&gt; TYPE STANDARD TABLE,
  5. &lt;fs_segment&gt; TYPE any.
  6. IF ID = &#39;1234&#39;.
  7. me-&gt;method_that_import_desired_table( IMPORTING et_table = dy_table ).
  8. ASSIGN dy_table-&gt;* TO &lt;dyn_table&gt;.
  9. DATA(ls_dyn_table) = dy_table.
  10. LOOP AT &lt;dyn_table&gt; ASSIGNING FIELD-SYMBOL(&lt;fs_row&gt;).
  11. IF ls_dyn_table-segment IS INITIAL.
  12. CONTINUE.
  13. ENDIF.
  14. ENDLOOP.
  15. ENDIF.

答案1

得分: 0

在循环内部表时,您必须动态分配字段段并检查它是否具有值:

  1. LOOP AT &lt;dyn_table&gt;
  2. ASSIGNING FIELD-SYMBOL(&lt;fs_row&gt;).
  3. DATA(tabix) = sy-tabix. "注意内部表中的行索引
  4. ASSIGN COMPONENT 'SEGMENT'
  5. OF STRUCTURE &lt;fs_row&gt;
  6. TO FIELD-SYMBOL(&lt;segment&gt;).
  7. IF sy-subrc EQ 0 AND
  8. &lt;segment&gt; IS INITIAL.
  9. DELETE &lt;dyn_table&gt; INDEX tabix. "按行索引删除
  10. ENDIF.
  11. ENDLOOP.
英文:

When you loop the internal table, you have to assign the field segment dynamically and check if it has a value:

  1. LOOP AT &lt;dyn_table&gt;
  2. ASSIGNING FIELD-SYMBOL(&lt;fs_row&gt;).
  3. DATA(tabix) = sy-tabix. &quot;note row index in internal table
  4. ASSIGN COMPONENT &#39;SEGMENT&#39;
  5. OF STRUCTURE &lt;fs_row&gt;
  6. TO FIELD-SYMBOL(&lt;segment&gt;).
  7. IF sy-subrc EQ 0 AND
  8. &lt;segment&gt; IS INITIAL.
  9. DELETE &lt;dyn_table&gt; INDEX tabix. &quot;delete by row index
  10. ENDIF.
  11. ENDLOOP.

huangapple
  • 本文由 发表于 2023年7月13日 20:19:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/76679314.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定