使用 С# CSVHELPER 从 CSV 获取值时,代码会重复

如何解决使用 С# CSVHELPER 从 CSV 获取值时,代码会重复

读取CSV时方法中的代码重复。如何删除重复项以及它们为什么会发生?在没有它们的情况下写入 CSV,但在读取时,重复开始:

方法

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 static void Main(string[] args)
    {
        Research();
    }

    public static void Research()
    {

            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) 
            { 
            Delimiter = ",",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}");
               }
            }
        }
    }
}

输出到控制台:

enter image description here

解决方法

问题是您在创建产品的循环中包含了 CSV 文件的写入和读取。创建您的第一个产品,将其写入 CSV 文件,然后读取并打印到您的控制台。循环继续并创建您的第二个产品。产品 1 和产品 2 被写入 CSV 文件,然后它们都从 CSV 文件中读取并打印到您的控制台。对于创建的每个产品,这都会继续,这就是您在控制台中显示重复项的原因。在写入 for

之前,您需要关闭 file.csv 循环
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);

} // Close your loop here!!

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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?