首页 > 解决方案 > CsvHelper:如何忽略标题行?

问题描述

我正在使用CsvHelper包来解析 TSV 文件。

我希望一次处理每条记录,而不是自动反序列化为一个类,因为我需要单独处理这些字段。

但是,即使我设置HasHeaderRecord = true了 ,我也会将标头作为循环中的第一条记录返回。

文档说:“Read()将阅读器推进到下一条记录。这不会读取标题。您需要调用 CsvHelper.CsvReader.Read 然后调用 CsvHelper.CsvReader.ReadHeader 以读取标题”。

这个 GitHub 问题说:“调用 Read() 将读取当前记录。如果你有一个标题记录,你需要在之后调用 ReadHeader”。

但这对我来说仍然没有意义,在下面的代码中。我应该调用ReadHeader每一行(在循环内)吗?这没有任何意义,而且我试过了,它抛出了一个异常。

目前,我可以手动忽略第一条记录,但我很好奇ReadHeader方法,以及我对上面的理解!

using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
csv.Configuration.Delimiter = "\t";
csv.Configuration.HasHeaderRecord = true;
while (csv.Read())
{
    if (csv.Context.Record.Length != numExpectedColumns)
    {
        errors++;
        continue;
    }

    int i = 0; // Calculate which index to be reading from based on various factors.
    string interestingField = csv[i];
}

标签: c#csvhelper

解决方案


推荐阅读