读取CSV文件时如何有一个可选的标题行?

时间:2019-05-17 05:46:54

标签: c# csvhelper

我需要导入可能没有标题记录的CSV文件。

如果我读取的文件没有标题行,则假定第一个数据行是标题,并且不返回它。 如果我指定HasHeaderRecord = false,则在有标头记录时将引发异常。

是否可以使用CsvHelper库并具有可选的标头记录?

我可以使用这种方法来使其工作,但似乎有更好的方法:

csvReader.Configuration.HasHeaderRecord = false;

while (csvReader.Read())
{
    try
    {
        var record = csvReader.GetRecord<MyModel>();
        myRecordList.Add(record);
    }
    catch (ReaderException rex)
    {
        // Check if this is an error with no header record and ignore
        if (rex.ReadingContext.CurrentIndex == 1 &&
            rex.ReadingContext.RawRecord.ToLower().Contains("myHeaderColumnName"))
        {
            continue;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

我不确定这是否是最好的方法,但是它确实绕过了引发异常的过程。

Array
(
    [user11] => 15
    [user7] => 15
    [user4] => 30
    [user19] => 36
    [user10] => 39
)

答案 1 :(得分:1)

我认为csvReader没有内置的方法可以知道。有两种方法可以知道:

  1. 用户提供“标题行是/否”信息。
  2. 您可以通过读取前几行并检查一些属性来自己实现检测逻辑。例如。几列的内容类型。

我认为信息应该由用户提供,或者文件的来源应符合始终提供标题行或从不提供标题行的标准。