我正在尝试比较两个文本文件a.txt
和b.txt
,我希望得到两者之间的区别。
a.txt
是昨天的结果
b.txt
是当前的结果
棘手的是,我想知道“b.txt”与“a.txt”相比缺少什么,即使在“b.txt”中可能添加了新内容,也需要排除这些新对象。登记/>
这两个文件没有排序,因此'a.txt'中索引1的内容可以是'b.txt'中的索引2。我正在比较像“mano - mathiasrønnownørtoft”这样的字符串。
我所有尝试过的只是最终显示新物体
我尝试了什么:
string[] File1Lines = File.ReadAllLines(path);
string[] File2Lines = File.ReadAllLines(newPath);
List<string> NewLines = new List<string>();
for (int lineNo = 0; lineNo<File1Lines.Length; lineNo++)
{
if (!String.IsNullOrEmpty(File1Lines[lineNo]) && !String.IsNullOrEmpty(File2Lines[lineNo]))
{
if(String.Compare(File1Lines[lineNo], File2Lines[lineNo]) != 0)
NewLines.Add(File2Lines[lineNo]) ;
}
else if (!String.IsNullOrEmpty(File1Lines[lineNo]))
{
}
else
{
NewLines.Add(File2Lines[lineNo]);
}
}
if (NewLines.Count > 0)
{
File.WriteAllLines(resultpath, NewLines);
}
这只是给我合并的文件。希望我已经正确地解释了自己。
试过这个,为什么不起作用?它没有任何显示。 List<string> a = File.ReadAllLines(path).ToList();
List<string> b = File.ReadAllLines(newPath).ToList();
List<string> copy = new List<string>(a);
foreach (string s in copy)
{
if (b.Contains(s))
{
a.Remove(s);
}
else
{
continue;
}
}
myWriter.WriteLine(a);
答案 0 :(得分:1)
这实际上取决于你想要差异的准确程度以及你想要的速度。
一个简单的实现方法是获取A和B的所有行,A中的foreach行,如果B包含该行,则从A和B中删除该行一次。剩下的是A中的线但不是B中的线,反之亦然。
请注意,此方法不考虑排序,因此
Log 1
C
B
A
和
Log 2
A
B
C
被认为是相同的。
List<string> A;
List<string> B;
List<string> aCopy = new List(A);
foreach(string s in aCopy)
{
if (B.Contains(s))
{
A.Remove(s);
B.Remove(s);
}
}
//Whats in A are whats missing in B
//Whats in B are whats missing in A
答案 1 :(得分:1)
您可以使用正则表达式命令
加入,排序和删除相等字符串 using System;
using System.Text;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string strFile4xf = File.ReadAllText(@"a.txt");
strFile4xf = Regex.Replace( strFile4xf, @"(.*?)\r", "$1a\r");
File.WriteAllText(@"a1.txt", strFile4xf);
string strFile4xe = File.ReadAllText(@"b.txt");
strFile4xe = Regex.Replace( strFile4xe, @"(.*?)\r", "$1b\r");
File.WriteAllText(@"b1.txt", strFile4xe);
string s4 = File.ReadAllText(@"a1.txt");
string s2 = File.ReadAllText(@"b1.txt");
string sn = string.Concat(s4, s2);
File.WriteAllText(@"join.txt", sn);
var contents = File.ReadAllLines("join.txt");
Array.Sort(contents);
File.WriteAllLines("join.txt", contents);
string strFile4x = File.ReadAllText(@"join.txt");
strFile4x = Regex.Replace( strFile4x, @"\n(.*?)a\r\n\1b\r", "");
File.WriteAllText(@"removeequal.txt", strFile4x);
var contents2 = File.ReadAllLines("removeequal.txt");
Array.Sort(contents2);
File.WriteAllLines("removeequal.txt", contents2);
string strFile4x2 = File.ReadAllText(@"removeequal.txt");
strFile4x2 = Regex.Replace( strFile4x, @"\n\r", "");
File.WriteAllText(@"blanklines.txt", strFile4x2);
}
}
此命令与重复字符串\ n(。*?)\ r \ n \ 1 \ r \ n匹配时匹配