解析文件时如何忽略分隔符定义?

时间:2021-02-17 13:30:13

标签: csv csvhelper

我正在使用 CsvHelper,但如果文件的第一行类似于 sep=,

我是这样做的:

    using var reader = new StreamReader(fileStream);
    using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);

    return csv.GetRecords<ClassToReadInto>()
        .Select(t => new ClassToMapTo
        {
            // map goes here
        })
        .ToList();

会发生什么:

    CsvHelper.HeaderValidationException: Header with name 'Type'[0] was not found. // and a bunch of other names

所以 CsvHelper 只是试图将第一行视为标题行。我怀疑它甚至设置了这一行的分隔符。为了解决这个问题,我只是想出了这样的东西:

    while (csv.Read())
    {
        csv.ReadHeader();

        try
        {
            csv.ValidateHeader(typeof(CsvOrder));
            break;
        }
        catch { }
    }

是否有“正确的方法”来做到这一点?

1 个答案:

答案 0 :(得分:0)

如果它总是在那里,你可以先读一行。

csv.Read();
var records = csv.GetRecords<ClassToReadInto>();

如果它不总是在那里,你需要做一个检查。

csv.Read();
if (!csv[0].StartsWith("sep="))
{
    // The first row is the header, so we need to read it.
    csv.ReadHeader();
}
var records = csv.GetRecords<ClassToReadInto>();