【问题标题】:CsvHelper Ignore case for header namesCsvHelper 忽略标题名称的大小写
【发布时间】:2018-03-27 19:41:59
【问题描述】:

我有一些课

 public class Import
{
    public DateTime Date { get; set; }
    public string Category { get; set; }
}

在 csv 文件中,标题名称可以小写。 读取文件时如何忽略大小写?

 var reader = new StreamReader(@"///");
        var csv = new CsvReader(reader);

        var records = csv.GetRecords<Import>().ToList();

【问题讨论】:

    标签: c# csvhelper


    【解决方案1】:

    如果您使用http://joshclose.github.io/CsvHelper/,您可以在构建CsvReader时提供一些配置或在构建后配置它。

        using (var stringReader = new StringReader(yourString))
        using (var csvReader = new CsvReader(stringReader))
        {
            // Ignore header case.
            csvReader.Configuration.PrepareHeaderForMatch =  (string header, int index) => header.ToLower();
            return csvReader.GetRecords<Import>().ToList();
        }
    

    https://joshclose.github.io/CsvHelper/api/CsvHelper.Configuration/Configuration/ 的 PrepareHeaderForMatch 部分中有更多文档

    为了更详细,还可以在此处找到类映射说明: https://joshclose.github.io/CsvHelper/examples/configuration

    希望对您有所帮助。

    【讨论】:

    • PrepareForMatch ToLower() 路线 - 这是否需要您绑定的 C# 类的属性全部小写? IE。仍然需要输入的大小写和您的模型匹配吗?否则再次......他们会有不同的情况。要求匹配大小写远非“不区分大小写”
    • 随机旧 CsvHelper 代码显示 csvReader.Configuration.IsHeaderCaseSensitive = true; 但此配置属性现在看起来不是库的一部分?看起来银弹被移除了。
    • @mmcrae 一开始我也是这么想的,但根据文档,“标题字段和成员名称都是通过这个函数运行的。”
    • @DonCheadle ToLower() 在文件头以及类的属性上运行,因此实际上进行了不区分大小写的比较。
    【解决方案2】:

    在当前版本的 CsvHelper 中,你必须像这样配置它:

    var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        PrepareHeaderForMatch
        = args => args.Header.ToLower()
    };
    using (var reader = new StreamReader(inputFile))
    using (var csv = new CsvReader(reader, csvConfig))
    {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2011-01-09
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多