gpt4 book ai didi

c# - CsvHelper PrepareHeaderForMatch 将 Context 作为一项数组返回

转载 作者:行者123 更新时间:2023-12-04 10:45:40 25 4
gpt4 key购买 nike

一直在使用 CsvHelper 6.0.0 版,决定升级到最新版本(当前为 12.3.2)并发现它使用另一个参数,即 csv.Configuration.PrepareHeaderForMatch 的 lambda 中的索引| , ( 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; }
}

关于c# - CsvHelper PrepareHeaderForMatch 将 Context 作为一项数组返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59718524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com