如何解决解析文件时如何忽略分隔符定义?
我正在使用 CsvHelper,但如果文件的第一行类似于 sep=,
我是这样做的:
using var reader = new StreamReader(fileStream);
using var csv = new CsvReader(reader,CultureInfo.InvariantCulture);
return csv.GetRecords<ClasstoReadInto>()
.Select(t => new ClasstoMapTo
{
// map goes here
})
.ToList();
会发生什么:
CsvHelper.HeaderValidationException: Header with name 'Type'[0] was not found. // and a bunch of other names
所以 CsvHelper 只是试图将第一行视为标题行。我怀疑它甚至设置了这一行的分隔符。为了解决这个问题,我只是想出了这样的东西:
while (csv.Read())
{
csv.ReadHeader();
try
{
csv.ValidateHeader(typeof(CsvOrder));
break;
}
catch { }
}
是否有“正确的方法”来做到这一点?
解决方法
如果它总是在那里,你可以先读一行。
csv.Read();
var records = csv.GetRecords<ClassToReadInto>();
如果它不总是在那里,你需要做一个检查。
csv.Read();
if (!csv[0].StartsWith("sep="))
{
// The first row is the header,so we need to read it.
csv.ReadHeader();
}
var records = csv.GetRecords<ClassToReadInto>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。