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 获取值时,代码重复