@Vindus940

Как брать дубли из CSV в C#?

Код дублируется в методе при чтении CSV. Как удалить дубликаты и почему они возникают? Запись в CSV происходит без них, но при чтении начинаются дубликаты:

using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
 
public class Program
{

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
 
        public Product(int id, string name)
        {
            Id = id;
            Name = name;
        }
 
    }
 
    public const string PathToDoc = "C:/Users/Saint/Desktop/TaskRetail/yml.xml";
    public static void Main(string[] args)
    {
 
        GetXML();
        Research();
    }
    
    public static void Research()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
        var document = new XmlDocument();
        document.Load(PathToDoc);
        var xmlDoc = document.SelectNodes("/yml_catalog/shop/offers/offer");
        var count = xmlDoc.Count;
        var products = new List<Product>();
        Console.WriteLine($"Offers count: {count}");
        for (var i = 0; i < count; i++)
        {
            var element = xmlDoc.Item(i);
            var id = int.Parse(element.Attributes.GetNamedItem("id").Value);
            var name = element.SelectSingleNode("name").InnerText;
            var product = new Product(id, name);
            //Console.WriteLine($"Id: {id}, name: {name}");
 
            products.Add(product);
 
            using (var writer = new StreamWriter("C:\\Users\\Saint\\Desktop\\TaskRetail\\file.csv", false, Encoding.UTF8))
            using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
            {
                csv.WriteRecords(products);
            }
 
            var config = new CsvConfiguration(CultureInfo.InvariantCulture) 
            { 
            PrepareHeaderForMatch = header => header.Header.ToLower()
            };
 
            using (var reader = new StreamReader("C:\\Users\\Saint\\Desktop\\TaskRetail\\file.csv", Encoding.UTF8))
            using (var csv = new CsvReader(reader, config))
 
            {
                var records = csv.GetRecords<Product>();
 
                foreach (var record in records)
                {
                    Console.WriteLine($"{record.Id} {record.Name}");
               }
            }
        }
    }
}
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Вероятно, чтение следует вынести из цикла, который
for (var i = 0; i < count; i++)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы