一直在使用 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 = ",";
我一定错过了什么。无论使用版本 6.0.0 还是 12.3.2,我都会得到相同的 var record
结果。我猜您的数据还有更多我没有看到的情况。
版本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/