CsvHelper 从没有标题的文件加载数据表不起作用

问题描述 投票:0回答:1

我有一些简单的代码,可以从 .csv 文件加载数据表(如果它包含标题)。现在我需要从没有标题的文件加载数据表。我期望设置 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);
            }
        }
c# datatable header csvhelper
1个回答
1
投票

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

更新:2024 年 2 月 1 日:他们上周修复了

由于他们在过去的两年里都没有解决这个问题,谁知道他们是否会这样做。在此之前,您可以使用此代码,它应该按预期工作:

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.