2010-08-11 3 views
0

Нужна помощь, у меня есть два источника информации, и информация экспортируется в два разных файла CSV разными программами. Они должны включать ту же информацию, однако это то, что нужно проверить.C# - Сравнение двух файлов CSV и предоставление вывода

Поэтому то, что я хотел бы сделать это следующим образом:

  • Берите информацию из двух файлов.
  • Вывод любых отличий и файл, в котором находится разница. (Например, файл A Содержится, но файл B не был и наоборот).

Файлы составляют 200 000 нечетных строк, поэтому их необходимо будет максимально эффективно.

Пробовал делать это с помощью Excel, однако оказалось слишком сложным, и я действительно пытаюсь найти способ программно.

+0

Это поможет, если вы были более конкретны в отношении различий, которые вы ожидаете найти, - различий в данных или в формате? Такое же количество строк? и т. д. – Benjol

+1

Является ли заказ одинаковым в обоих файлах? Решение сильно отличается в зависимости от того, делает оно это или нет. –

+0

ОК, извините. Различия должны быть в данных, есть один столбец идентификаторов и один столбец версии. Существует несколько строк. Формат один и тот же, например, ID в первом столбце с количеством строк X и Version во втором столбце с таким же количеством строк. Заказ не будет таким же, строка в файле A не будет одинаковой в файле B, или хотя это может быть. Простым способом описания того, что должно быть сделано, вероятно, будет список имен, однако они не упорядочены и просто помещены в лист.Мне нужно проверить, что фамилия совпадает с именем. – Vibralux

ответ

1

Предполагая, что файлы действительно должны быть идентичны, вплоть до текстовых классификаторов, порядок строк и количество строк, содержащихся в каждом файле, самый простой подход может быть просто перебирать обоих файлов вместе и сравнить каждая строка.

using (StreamReader f1 = new StreamReader(path1)) 
using (StreamReader f2 = new StreamReader(path2)) { 

    var differences = new List<string>(); 

    int lineNumber = 0; 

    while (!f1.EndOfStream) { 
     if (f2.EndOfStream) { 
      differences.Add("Differing number of lines - f2 has less."); 
      break; 
     } 

     lineNumber++; 
     var line1 = f1.ReadLine(); 
     var line2 = f2.ReadLine(); 

     if (line1 != line2) { 
      differences.Add(string.Format("Line {0} differs. File 1: {1}, File 2: {2}", lineNumber, line1, line2); 
     } 
    } 

    if (!f2.EndOfStream) { 
     differences.Add("Differing number of lines - f1 has less."); 
    } 
} 
+0

Спасибо, но только добавил немного более подробно, поэтому это не сработает. Спасибо в любом случае! – Vibralux

1

В зависимости от ваших ответов на замечания по вашему вопросу, если он на самом деле не нужно делать с кодом, вы могли бы сделать хуже, чем загрузить инструмент сравнения, который, вероятно, более изощренными.

(Winmerge, например)

0

ОК, для кого-либо еще, что Googles это и находит это. Вот что я ответил.

Я экспортировал детали в CSV и заказал их численно, когда они были экспортированы для удобства использования. Как только они были экспортированы в виде двух файлов CSV, я затем использовал программу под названием Beyond Compare, которая находится в here. Это позволяет сравнивать файлы.

Сначала я использовал Beyond Compare вручную, чтобы проверить, что я экспортировал, и т. Д., Однако Beyond Compare имеет возможность использовать командные строки для сравнения. Это приводит к тому, что все делается программно, все, что нужно сделать, - это просмотр пользователями результатов в Beyond Compare. Вы можете экспортировать их в другой CSV, я не выглядел так, как графический интерфейс Beyond Compare очень приятный и полезный, поэтому его проще использовать.

Смежные вопросы