Мне нужно разработать приложение, в котором сравниваются два файла csv. В первом файле есть список адресов электронной почты. Второй список также содержит адреса электронной почты, но включает информацию о имени и адресе. Первый список содержит адреса электронной почты, которые необходимо удалить из второго списка. У меня есть быстрый CSV-ридер с сайта CodeProject, который работает очень хорошо. Приложение не будет иметь доступа к серверу базы данных. Новый файл будет создан с данными, которые считаются проверенными. Значит, он не будет содержать никакой информации из первого файла.Сравнение 2 файлов CSV в совете C#?
ответ
Если вы читаете оба списка в коллекциях, вы можете использовать Linq для определения подмножества адресов.
Вот небольшой пример, который я собрал для вас.
using System;
using System.Linq;
using System.Collections.Generic;
public class RemoveExample
{
public List<Item> RemoveAddresses(List<Item> sourceList, List<string> emailAddressesToRemove)
{
List<Item> newList = (from s in sourceList
where !emailAddressesToRemove.Contains(s.Email)
select s).ToList();
return newList;
}
public class Item
{
public string Email { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
}
Чтобы его использовать, для чтения CSV в список, а затем передать его, и список адресов, чтобы удалить как список в метод.
Именно то, что я искал. Кроме того, если кому-то интересно, я нашел эту классную библиотеку LINQ to CSV: http://www.codeproject.com/KB/linq/LINQtoCSV.aspx – DDiVita
Не знаете, какой совет вам нужен, это звучит прямо.
Heres быстрый набросок алгоритма:
- цикл по электронной почте от первого CSV
- положить каждое письмо в HashSet <>
- запустить удаления
- положить каждый выход электронная почта в том же HashSet <>
- если есть DuplicateKeyException, вы пропустили один в удаления
- если emailList2.Count - emailList1.Count = outputList.Count, вы удалили слишком много
Это относительно простой, предполагая, что списки не очень большие или использование памяти не является чрезмерно большой проблемой: прочитайте оба набора адресов электронной почты в двух отдельных экземплярах HashSet<string>
. Затем вы можете использовать HashSet<T>.ExceptsWith
, чтобы найти различия между этими двумя наборами. Например:
HashSet<string> setA = ...;
HashSet<string> setB = ...;
setA.ExceptWith(setB); // Remove all strings in setB from setA
// Print all strings that were in setA, but not setB
foreach(var s in setA)
System.Console.WriteLine(s);
Кстати, выше должно быть O (N * Log (N)) сложности, по сравнению с использованием ответ Linq, который будет O (N^2) на Неиндексированные данных.
- 1. Сравнение разных столбцов из 2 файлов csv
- 2. 2 Сравнение файлов Hdfs
- 3. Сравнение CSV-файлов в ubuntu
- 4. сравнение файлов csv
- 5. сравнение CSV файлов в Perl
- 6. Сравнение 2 файлов в Python
- 7. Сравнение 2 XML-файлов
- 8. Сравнение файлов csv с pySpark
- 9. сравнение 2 файлов построчно
- 10. Сравнение 2 файлов Powershell
- 11. Сравнение 2 файлов построчно
- 12. Сравнение 2 файлов txt
- 13. Сравнение 2 текстовых файлов
- 14. Сравнение 2 текстовых файлов
- 15. Объектив C Сравнение 2 файлов bytewise
- 16. Сравнение двух файлов CSV в Python
- 17. сравнение 2 файлов в vbscript
- 18. ошибка округления в совете C++
- 19. Сравнение и добавление файлов .csv в Python
- 20. Сравнение файлов в C#
- 21. Сравнение файлов csv с -like в Powershell
- 22. Разбор больших CSV-файлов и сравнение данных
- 23. Сравнение столбцов на 2 файлах csv
- 24. Слияние 2 файлов csv
- 25. Сравнение 2 файлов с использованием python 3
- 26. New CSV путем объединения 2 CSV файлов
- 27. Сравнение двух файлов в c
- 28. Сравнение CSV файлов с помощью поля значений
- 29. Сравнение двух файлов CSV и получать разницу
- 30. Сравнение двух файлов csv и цветового кода разница в csv
Когда вы удаляете адреса электронной почты из второго файла, должны ли остальная часть данных в строке оставаться или вы удаляете всю строку? – AllenG