在vb.net中比较三个文本文件的有效方法

时间:2011-04-18 02:50:53

标签: .net vb.net comparison text-files

我有一个vb.net程序,我必须比较三个文本文件(两个对一个)并验证它们是否相同。即使有一个更改,我必须知道更改的位置,文本文件和哪一行。文本文件的格式是这样的

timestamp|ab|someval
timestamp|ab|someval1
timestamp|bc|someval2
timestamp|bc|someval2

所有文本文件都具有相同的格式,但值可能采用不同的顺序。例如

text1.txt

ts|av|2
ts|ab|3
ts|av|4

text2.txt

ts|av|4
ts|ab|3
ts|av|2

这不应该失败,因为它们具有相同的值。任何人都能告诉我我该怎么办?

1 个答案:

答案 0 :(得分:1)

因此,实际上,你所拥有的东西可能是同一物品的三种不同的排列。因此,如果文本文件是整数文件,则这三个文件将被视为相同:

1,2,3 3,2,1 2,1,3

1,2,4不会。

如果文件足够小以适应内存,那么你可以使用简单的HashSet(of String)(我希望我的VB语法正确)。请注意,您只需将ONE文件的内容保留在内存中。其他的是逐行阅读的。

对于第一个文件,将每行读入对象(或者只是将其保存为字符串)并将其添加到HashSet。现在,对于其他两个文件中的每一个(假设hashSet被称为file1Data):

int lineNum = 0;
foreach (var line in File.ReadLines(filename))
{
    ++lineNum;
    if (!file1Data.Contains(line))
    {
        // error here
    }
}

如果文件不够小,无法容纳到内存中,那么除了对每个文件进行外部排序外,我没有其他选择,然后使用现有的diff程序,或者编写简单的合并比较。