解析文件时如何忽略分隔符定义?
How to ignore separator definition while parsing a file?
我正在使用 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 只是试图将第一行视为 header 行。我怀疑它甚至设置了这一行的分隔符。为了解决这个问题,我只想到了这样的事情:
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>();
我正在使用 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 只是试图将第一行视为 header 行。我怀疑它甚至设置了这一行的分隔符。为了解决这个问题,我只想到了这样的事情:
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>();