0

我有两个不同的管道分隔数据文件。一个比另一个大。我正在尝试根据小文件(文件 B)中包含的数据,有选择地从大文件(我们将其称为文件 A)中删除数据。文件 A 包含所有数据,文件 B 仅包含文件 A 中的一部分数据。

我想要一个函数或现有程序,它从文件 A 中删除文件 B 中包含的所有数据。我想到了一个这样的函数:

Pseudo-code:

    while !eof(fileB) {
        criteria = readLine(fileB);
        lineToRemove = searchForLine(criteria, fileA);
        deleteLine(lineToRemove, fileA);
    }

但是,该解决方案对我来说似乎效率很低。文件 A 有 23,000 行,文件 B 有 17,000 行。文件 B 中包含的数据实际上分散在文件 A 中。

如果有一个程序可以做到这一点,我更喜欢它而不是代码。我对代码也不挑剔。C++ 是我的强项,但这个数据文件将在不久的将来转换为 SQL 数据库,所以我也擅长使用 SQL/PHP 代码。

4

1 回答 1

0

无论数据库是什么,都将这两个表加载到 SQL 中。进行这种操作是数据库的设计目的。然后就可以执行命令了:

delete from A
    where A.criteria = (select B.criteria from B)

但是,我会将数据放入暂存表中,然后在 SQL 中创建和填充我想要的数据。就像是:

create table A ( . . . )

insert into A
    select *
    from StagingA
    where A.criteria not in (select B.criteria from StagingB)

(这里我使用了“*”和一个没有列列表的插入。在实践中,你应该有列的列表。)

于 2012-12-20T20:48:54.520 回答