比较两个文档

3
我有两个非常大的列表。 它们最初都是在Excel中,但较大的一个列表包含约160,000个电子邮件地址,以及其他信息,如其姓名和地址等。较小的一个列表只包含18,000个电子邮件地址。
我的问题是,如何最轻松地从第一个文档中删除所有包含第二个文档中电子邮件地址的18,000行数据?
我考虑使用正则表达式或其他应用程序。 我已经尝试在网上搜索相关信息,但好像没有太多与此特定问题相关的信息。 我还尝试了Notepad ++,但当我尝试比较这些大型文件时,它会冻结。
-提前感谢!

1
你熟悉任何编程语言吗?如果是的话,你能否发布有关两个文件结构和格式的更多详细信息? - Nikola Malešević
3
在这张 16 万名单中,邮箱地址是否在一个列里?如果是的话,你可以将这两个列表放到 Excel 中,使用 vlookup 函数(这假定电子邮件地址将是完全匹配的)来查找重复的 18,000 封邮件,然后使用 AutoFilterSort 来将它们删除掉。 - Scott Holtzman
2
如果有可能的话,基于正则表达式的解决方案很可能对您的目的而言效率不高。 - Happy Green Kid Naps
如果你懂一点编程,你可以自己编写脚本。在PHP中,你可以使用像array_diffarray_intersect这样的函数来比较两个地址数组。 - GolezTrol
1
我同意Scott Holtzman的观点。假设它们格式化为csv文件,您可以在Excel中打开它们,并使用vlookup、autofilter和/或sort等函数来比较列表并过滤它们。需要注意的一点是,如果您使用的是Excel 2003,则其行数限制仅略高于65,000行,因此只有在您使用的是Excel 2007或更高版本时才应使用此方法。 - Stepan1010
显示剩余5条评论
2个回答

0

所以我在论坛上读到了一篇帖子:这里

=MATCH(B1,$A$1:$A$3,0)>0

列B将是包含160,000个输入的大列表,而列A则是我需要删除的18,000个项目的列表。

我使用这个公式来匹配所有内容,并在另一列中粘贴这个公式。它会打印出一个错误或TRUE。如果数据同时存在于两列中,则打印出true。

然后,因为我不擅长使用Excel,我将这段文本放入Notepad++中,并搜索所有包含TRUE的行(区分大小写,因为在我的情况下,有些数据中有单词true但没有大写)。我标记了这些行,然后在搜索、书签下,删除了所有带有书签的行。将其粘贴回Excel中,就完成了。

我想感谢你们的帮助和指导 :)


0

好问题。我会用C++编写一个程序[你可以将这个想法推广到你熟悉的语言上;你没有提到你精通哪些语言],将较小文件的每个项目读入字符串向量中。首先,当然要使用Excel将文件保存为CSV而不是XLS或XLSX,这样可以用逗号分隔值,以便更轻松地处理它们。对于较大的列表,“另存为”只包含电子邮件地址的副本,并暂时删除其他行。

然后,您可以打开较大的列表并使用嵌套循环来检查是否应输出到输出文件。类似于:

bool foundMatch=false;
for(int y=0;y<LargeListVector.size();y++) {
    for(int x=0;x<SmallListVector.size();x++) {
        if(SmallListVector[x]==LargeListVector[y]) foundMatch=true;
    }
    if(!foundMatch) OutputVector.append(LargeListVector[y]);
    foundMatch=false;
}

这可能部分是伪代码,但你明白我意思吧?


谢谢!我精通C++,所以我回家后会尝试一下(工作场所没有编译器可供使用)。 - Luthfur Miah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接