从内部查找、删除和提取重复项 table
Find, delete and extract duplicates from an internal table
我有一个内部 table,其中包含从文件上传的 200 万行。我想删除任何重复的行并提取重复的行号并将它们添加到另一个 table。使用 ABAP 7.40 执行此操作的 best/most 有效方法是什么?经典ABAP也可以。
所以这是我的原始示例 table 我想通过比较 A 列和 B 列来查找重复项
A | B | C
-----------
a1 | b1 | c1
a1 | b2 | c1
a2 | b1 | C2
a1 | b1 | c2
a2 | b2 | c2
第 1 行和第 4 行重复,所以我想删除它们以结束
A | B | C
-----------
a1 | b2 | c1
a2 | b1 | C2
a2 | b2 | c2
还有另一个 table 存储重复项:
Row number | Error
-------------------
1 | Duplicate
4 | Duplicate
我在这个网站上看到过类似的请求,但它们的工作方式与我需要的有点不同。谢谢
这是查找重复行的代码(有效 >= 7.40):
TYPES : BEGIN OF ty_line,
a TYPE c LENGTH 2,
b TYPE c LENGTH 2,
c TYPE c LENGTH 2,
END OF ty_line,
ty_lines TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.
DATA(itab) = VALUE ty_lines(
( a = 'a1' b = 'b1' c = 'c1' )
( a = 'a1' b = 'b2' c = 'c1' )
( a = 'a2' b = 'b1' c = 'c2' )
( a = 'a1' b = 'b1' c = 'c2' )
( a = 'a2' b = 'b2' c = 'c2' ) ).
DATA(duplicates) = VALUE string_table(
FOR GROUPS <group> OF <line> IN itab
GROUP BY ( a = <line>-a b = <line>-b size = GROUP SIZE )
( LINES OF COND #( WHEN <group>-size > 1 THEN VALUE string_table( (
concat_lines_of(
table = VALUE string_table(
FOR <line2> IN GROUP <group> INDEX INTO tabix ( |{ tabix }| ) )
sep = ',' ) ) ) ) ) ).
ASSERT duplicates = VALUE string_table( ( `1,4` ) ).
如果组的大小为 1,我使用 LINES OF
不生成一行。
我有一个内部 table,其中包含从文件上传的 200 万行。我想删除任何重复的行并提取重复的行号并将它们添加到另一个 table。使用 ABAP 7.40 执行此操作的 best/most 有效方法是什么?经典ABAP也可以。
所以这是我的原始示例 table 我想通过比较 A 列和 B 列来查找重复项
A | B | C
-----------
a1 | b1 | c1
a1 | b2 | c1
a2 | b1 | C2
a1 | b1 | c2
a2 | b2 | c2
第 1 行和第 4 行重复,所以我想删除它们以结束
A | B | C
-----------
a1 | b2 | c1
a2 | b1 | C2
a2 | b2 | c2
还有另一个 table 存储重复项:
Row number | Error
-------------------
1 | Duplicate
4 | Duplicate
我在这个网站上看到过类似的请求,但它们的工作方式与我需要的有点不同。谢谢
这是查找重复行的代码(有效 >= 7.40):
TYPES : BEGIN OF ty_line,
a TYPE c LENGTH 2,
b TYPE c LENGTH 2,
c TYPE c LENGTH 2,
END OF ty_line,
ty_lines TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.
DATA(itab) = VALUE ty_lines(
( a = 'a1' b = 'b1' c = 'c1' )
( a = 'a1' b = 'b2' c = 'c1' )
( a = 'a2' b = 'b1' c = 'c2' )
( a = 'a1' b = 'b1' c = 'c2' )
( a = 'a2' b = 'b2' c = 'c2' ) ).
DATA(duplicates) = VALUE string_table(
FOR GROUPS <group> OF <line> IN itab
GROUP BY ( a = <line>-a b = <line>-b size = GROUP SIZE )
( LINES OF COND #( WHEN <group>-size > 1 THEN VALUE string_table( (
concat_lines_of(
table = VALUE string_table(
FOR <line2> IN GROUP <group> INDEX INTO tabix ( |{ tabix }| ) )
sep = ',' ) ) ) ) ) ).
ASSERT duplicates = VALUE string_table( ( `1,4` ) ).
如果组的大小为 1,我使用 LINES OF
不生成一行。