c# - CsvHelper 从没有标题的文件中加载 DataTable 不工作

标签 c# datatable header csvhelper

我有一些简单的代码,如果 .csv 文件包含标题,它将加载 DataTable。现在我需要从没有标题的文件中加载数据表。我期望设置 HasHeaderRecord = false 并且将使用默认标题(Field1、Field2、...)创建 DataTable。事实并非如此,我可以看到 CsvReader 读取了记录,但由于没有标题,因此没有在 DataTable 中创建列。看起来这应该很简单,我错过了什么?此外,这不能使用类映射进行硬编码或加载,因为文件是动态的。

var dt = new DataTable();

        var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            HasHeaderRecord = false
        };

        var enc = System.Text.ASCIIEncoding.UTF8;

        using (var reader = new StreamReader(FileName, enc, true))
        using (var csv = new CsvReader(reader, csvConfig))
        {
            // Do any configuration to `CsvReader` before creating CsvDataReader.
            using (var dr = new CsvDataReader(csv))
            {
                dt.Load(dr);
            }
        }

最佳答案

这似乎是库中的错误,您可以在此处阅读: https://github.com/JoshClose/CsvHelper/issues/1240

由于他们在过去 2 年内没有修复它,谁知道他们是否会修复。在此之前,您可以使用应该按预期工作的代码:

using (var reader = new StreamReader(FileName, enc, true))
using (var csv = new CsvReader(reader, csvConfig))
using (var dr = new CsvDataReader(csv))
{
    while (dr.Read())
    {
        if (dt.Columns.Count == 0)
        {
            for (int i = 0; i < dr.FieldCount; i++)
                dt.Columns.Add();
        }

        DataRow row = dt.NewRow();
        for (int i = 0; i < dr.FieldCount; i++)
            row[i] = dr.GetString(i);
        dt.Rows.Add(row);
    }
}

关于c# - CsvHelper 从没有标题的文件中加载 DataTable 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73588500/

相关文章:

c# - Unity - 健康栏作为屏幕周围的轮廓线

c# - 是否可以用逗号而不是逗号空格来分割字符串

jsf - <h :link> vs <h:commandLink> in <h:dataTable>

c - 具有必须在 C 中的 .h 文件中公开的属性的私有(private)结构

c - 多个源文件的一个标题?

c# - 在 Windows CE 6 上调试数据中止和预取中止异常

c# - 在C#中比较两个日期并计算差值

javascript - 使用下拉菜单显示 2 个不同的数据表

asp.net - 使用 ArrayList 过滤数据表

C++:通过简单的添加示例了解头文件和头文件保护