要识别 ABAP 内表中的重复项,可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目:
ABAP">DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table
itab-field1 = 1. itab-field2 = 'A'. APPEND itab.
itab-field1 = 2. itab-field2 = 'B'. APPEND itab.
itab-field1 = 1. itab-field2 = 'A'. APPEND itab.
itab-field1 = 3. itab-field2 = 'C'. APPEND itab.
itab-field1 = 2. itab-field2 = 'B'. APPEND itab.* Sort internal table by the fields you want to check duplicates for
SORT itab BY field1 field2.* Compare current record with
在 ABAP 中,您可以使用简单的逻辑来识别和显示内表中的重复数据。一种常见的方法是使用 SORT
和 DELETE ADJACENT DUPLICATES
来标记或分离重复数据。但是,如果要保留重复数据以作进一步处理或显示,则可以使用另一种使用循环的方法。
下面的示例展示了如何查找和显示内表中的重复数据:
ABAP">TYPES: BEGIN OF ty_data,id TYPE i,name TYPE string,END OF ty_data.DATA: lt_table TYPE TABLE OF ty_data,ls_table TYPE ty_data,lt_duplicates TYPE TABLE OF ty_data." Populate the internal table with test data
APPEND VALUE #( id = 1 name = 'John' ) TO lt_table.
APPEND VALUE #( id = 2 name = 'Jane' ) TO lt_table.
APPEND VALUE #( id = 3 name = 'John' ) TO lt_table.
APPEND VALUE #( id = 4 name = 'Alice' ) TO lt_table.
APPEND VALUE #( id = 5 name = 'Jane' ) TO lt_table.
APPEND VALUE #( id = 6 name = 'John' ) TO lt_table." Sort the internal table by name or ID to find duplicates
SORT lt_table BY name." Loop through the table to find duplicates
LOOP AT lt_table INTO ls_table.AT END OF name.IF sy-tabix - sy-tabbix > 1.LOOP AT lt_table FROM sy-tabbix TO sy-tabix INTO ls_table.APPEND ls_table TO lt_duplicates.ENDLOOP.ENDIF.ENDAT.
ENDLOOP." Display the duplicates
LOOP AT lt_duplicates INTO ls_table.WRITE: / 'Duplicate:', ls_table-id, ls_table-name.
ENDLOOP.
说明:
- 内部表(
lt_table
): 该表存储数据记录。 - 排序: 该表按预计会发现重复记录的列(本例中
name
)排序。 - 使用
AT END OF
循环:检查一组记录是否具有相同的键(本例中name
)。如果发现某个键有多条记录,这些条目就会被识别为重复。 - 重复处理: 如果发现重复记录,则将其收集到
lt_duplicates
表中。 - 显示: 然后使用
LOOP
显示重复数据。
这种方法可确保检测到重复数据,并将其存储在单独的内部表中,以便进一步处理。