Я пытаюсь сравнить два текстовых файла a.txt
и b.txt
, я хочу получить разницу между ними.
a.txt
является результатом вчерашнего дня.
b.txt
- текущий результат.
Трудно сказать, что я не узнал, чего не хватает в «b.txt» по сравнению с «a.txt», даже если бы в «b.txt» было добавлено что-то новое, эти новые объекты должны быть исключены ,
Два файла не упорядочены, так что индекс 1 в 'a.txt' может быть индексом 2 в 'b.txt'. Я сравниваю строку как «mano-mathias rønnow nørtoft».
Все, что я пробовал, просто заканчивается показом новых объектов.
Что я пробовал:Сравнение файлов .txt и получение разницы
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);
Ваш код основывается на строках, по существу, находящихся в синхронизации между двумя файлами, что является довольно серьезным предположением. Вам нужно уточнить, что такое единица, которую вы сравниваете - строки? персонажи? а также местонахождение каждого файла может быть добавлено или удалено - в любом произвольном месте в любом файле? Также есть два случая определенного подразделения, которые рассматриваются как одна вещь или две вещи? и т. д. Это не тривиально! – peterG
Diffing files - это открытая и очень сложная проблема, однако она была решена в прошлом. Я предлагаю вам использовать существующую библиотеку вместо того, чтобы переопределять ее самостоятельно (если это не академическое упражнение). Например, DiffPlex: https://github.com/mmanela/diffplex – Dai
Вы изобретаете колесо. Зачем? Если вы действительно настаиваете на повторной реализации, тогда посмотрите на установленные алгоритмы, такие как алгоритм Майерса, используемый утилитой 'diff': https://en.wikipedia.org/wiki/Diff_utility#Algorithm – STW