Сравнить 2 текстовых файла
Есть 2 текстовых файла и надо вывести индексы всех строк, где есть отличия
Проблема моего кода:
Формат вывода не тот. Хотел сделать, чтобы выводилось не слово которое отличается, а именно номер строки которая отличается.
Например: текст в 1 файле "Hello world", а во 2-м файле "Hello"
И я хочу чтобы вместо world, вывелось "изменения в 1 строчке"
Мой код:
public List<string> Diff()
{
var lines1 = File.ReadAllLines(_test1).ToArray();
var lines2 = File.ReadAllLines(_test2).ToArray();
var symDiff = lines1.Except(lines2).Union(lines2.Except(lines1)).ToList();
return symDiff;
}
Ответы (2 шт):
Автор решения: tym32167
→ Ссылка
Как вариант
var lines1 = File.ReadAllLines(_test1);
var lines2 = File.ReadAllLines(_test2);
var len = Math.Max(lines1.Length, lines2.Length);
for (int i = 0; i < len; i++)
if (lines1.Length <= i || lines2.Length <= i || string.CompareOrdinal(lines1[i], lines2[i]) != 0)
Console.WriteLine($"изменения в {i + 1} строчке");
Автор решения: tym32167
→ Ссылка
Linq вариант (не проверял, проверяйте сами, но идея ясна)
public List<string> Diff()
{
var lines1 = File.ReadAllLines(_test1);
var lines2 = File.ReadAllLines(_test2);
return lines1.Zip(lines2, (x,y)=>(x,y))
.Select((item, i) => (item, i))
.Where(x=> string.CompareOrdinal( x.item.x, x.item.y) != 0)
.Select(x=>$"изменения в {x.i + 1} строчке")
.ToList();
}