c# - CsvHelper PrepareHeaderForMatch 将 Context 作为一项数组返回
问题描述
一直在使用 CsvHelper 版本 6.0.0,决定升级到最新版本(当前为 12.3.2),发现它使用了另一个参数,即 lambda 中的索引csv.Configuration.PrepareHeaderForMatch
,(Func<string,int,string>
)。
v6.0.0 的代码如下所示:
csv.Configuration.PrepareHeaderForMatch = header => Regex.Replace(header, @"\/", string.Empty);
对于上一行,IReadingContext.Record
返回一个包含多条记录的数组,每列一个。
v12.3.2 的代码如下所示:
csv.Configuration.PrepareHeaderForMatch = (header, index) => Regex.Replace(header, @"\/", string.Empty);
但是ReadingContext.Record
现在返回一个数组,其中所有列都在一条记录中。两个版本使用完全相同的文件。尝试弄乱 lambda,但结果是一样的。如何获取数组中的列Records
?
提前致谢!
解决方案
更新- 这是自 6.0.0 版以来已更改的分隔符的问题。默认分隔符现在使用CultureInfo.CurrentCulture.TextInfo.ListSeparator
. 因为我在美国,ListSeparator
所以,
这两个例子都对我有用。对于许多国家/ListSeparator
地区来说;
,这就是为什么在 12.3.2 版中,@dzookatz 仅找到 1 列。解决方案是在配置中指定分隔符。
csv.Configuration.PrepareHeaderForMatch = header => Regex.Replace(header, @"\/", string.Empty);
csv.Configuration.Delimiter = ",";
我肯定错过了什么。var record
无论使用版本 6.0.0 还是 12.3.2 ,我都会得到相同的结果。我猜你的数据还有更多我没有看到的情况。
版本 6.0.0
class Program
{
static void Main(string[] args)
{
var fooString = $"Id,First/Name{Environment.NewLine}1,David";
using (var reader = new StringReader(fooString))
using (var csv = new CsvReader(reader))
{
csv.Configuration.PrepareHeaderForMatch = header => Regex.Replace(header, @"\/", string.Empty);
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
var record = csv.Context.Record;
}
}
}
}
public class Foo
{
public int Id { get; set; }
public string FirstName { get; set; }
}
版本 12.3.2
public class Program
{
public static void Main(string[] args)
{
var fooString = $"Id,First/Name{Environment.NewLine}1,David";
using (var reader = new StringReader(fooString))
using (var csv = new CsvReader(reader))
{
csv.Configuration.PrepareHeaderForMatch = (header, index) => Regex.Replace(header, @"\/", string.Empty);
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
var record = csv.Context.Record;
}
}
}
}
public class Foo
{
public int Id { get; set; }
public string FirstName { get; set; }
}
推荐阅读
- r - 复选框 Shiny R 的反应性 k 均值分析
- gensim - gensim - ConcatenatedDoc2Vec: ModuleNotFoundError: No module named 'testfixtures
- neo4j - apoc.merge.node() Neo4j 中的 Hanlde 空值
- sql - 查找每个薪资范围内工作经验最长的前 2 名员工
- python - 有没有一种快速的方法可以将这种类型的数据转换为 python 中的字典?
- python - 如何在 C++ 中创建一个返回向量的递归函数?
- aws-lambda - 无法通过邮递员使用带有两个参数的 url 查询将项目放入 dynamoDB
- python - Web Scraping with Beautiful Soup Python - Seesaw - 输出没有长度错误
- laravel - 在 Trix 字段中添加/更新上传图像的链接
- python - 从冻结窗口中读取文本框