CSVHelper 在读取 csv 之前更改/操作标题

Posted

技术标签:

【中文标题】CSVHelper 在读取 csv 之前更改/操作标题【英文标题】:CSVHelper change/ manipulate headers before reading the csv 【发布时间】:2022-01-05 12:38:53 【问题描述】:

我无法控制我们可能获得的 csv 文件,并且他们会不时在名称中添加一个额外的“_”或年份,这与我所做的映射不匹配。 试过了

var config = new CsvConfiguration(cultureInfo)
              
                  PrepareHeaderForMatch = args => args.Header.Replace("_", " "),
              ;
config.PrepareHeaderForMatch = args => Regex.Replace(args.Header, @"2021", string.Empty);
List<CSVInvoiceLineDetail> CSVParsedDataList = new();
using TextReader reader = new StreamReader(file.OpenReadStream());
using var csv = new CsvReader(reader, config);
csv.Read();
csv.ReadHeader();
while (csv.Read())
                             
    CSVParsedDataList.Add(csv.GetRecord<CSVInvoiceLineDetail>());
    // Do something with the record.


但它不起作用,标题仍然是它们最初的样子。谁能指出这里做错了什么?

【问题讨论】:

让我印象深刻的第一件事是只有Regex.Replace 将被执行,而不是替换下划线。相反,将一个函数分配给PrepareHeaderForMatch once 并在其中执行两个替换。 【参考方案1】:

考虑

          var config = new CsvConfiguration(cultureInfo)
          
              PrepareHeaderForMatch = args => args.Header.Replace("_", " ").Replace("2021","");,
          ;

或者,如果您想从标题中去除所有数字和下划线:

          var config = new CsvConfiguration(cultureInfo)
          
              PrepareHeaderForMatch = args => Regex.Replace(args.Header, "[0-9_]", "")
          ;

请注意,这里将下划线替换为空,而不是空格,因此可能需要对声明的标题属性进行一些调整

【讨论】:

以上是关于CSVHelper 在读取 csv 之前更改/操作标题的主要内容,如果未能解决你的问题,请参考以下文章

使用 CsvHelper 读取多头 CSV 文件

使用 С# CSVHELPER 从 CSV 获取值时,代码重复

使用 CsvHelper 将 CSV 中的所有值读入列表

使用 CSVhelper 将单个列更新为先前编写的 CSV 文件。我有 Java 代码,但无法将其翻译成 C#

CSV 助手:坏数据异常

使用 CsvHelper 时转换为十进制