我有一些简单的代码,如果 .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/