首页 > 解决方案 > 如何使用 CsvHelper 在 csv 文件末尾跳过脚注

问题描述

我正在尝试以以下形式读取 CSV 文件:

日期 价值
2020 年 12 月 1 日 1
2020 年 12 月 2 日 2

文件末尾是一个脚注,全是文本。

如果我使用:

void Main()
{
    using (var reader = new StreamReader("path\\to\\file.csv"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        var records = csv.GetRecords<Foo>();
    }
}

public class Foo
{
    public DateTime Date { get; set; }
    public double Value { get; set; }
}

CsvHelper 抛出“FormatException:字符串未被识别为有效的 DateTime。从索引 0 开始有一个未知单词。”

如果我使用它会起作用:

while (csv.Read()) {
   try {
        records.Add(csv.GetRecord<Foo>());
    }
    catch (Exception e) {}
}

但这真的很慢。

我希望添加:

csv.Configuration.ShouldSkipRecord = record => record.Contains("The");

会解决问题,但我得到同样的错误。

任何建议将不胜感激。(对于无法正确格式化表格,我深表歉意。)

标签: c#csvhelper

解决方案


您可以定义用于表示注释行的字符:

var configuration = new CsvConfiguration { AllowComments = true, Comment = '#' };
using (var csv = new CsvReader(new StreamReader("path\\to\\file.csv"), configuration))
{
    var records = csv.GetRecords<Foo>();
}

但这要求您可以操作 csv 文件,或者最后一行的第一个字符是唯一的。


推荐阅读