我有一个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
这不应该失败,因为它们具有相同的值。任何人都能告诉我我该怎么办?
答案 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程序,或者编写简单的合并比较。