如何获取 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
来标记或分离重复数据。但是,如果要保留重复数据以作进一步处理或显示,则可以使用另一种使用循环的方法。
下面的示例展示了如何查找和显示内表中的重复数据:
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
显示重复数据。
这种方法可确保检测到重复数据,并将其存储在单独的内部表中,以便进一步处理。