我正在使用 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 { }
}
是否有“正确的方法”来做到这一点?
答案 0 :(得分:0)
如果它总是在那里,你可以先读一行。
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>();