问题
Trying to read a CSV file that has empty rows (usually at the end) using CsvHelper.GetRecords<T>()
.
Without the empty rows this works a treat. However if the CSV file has an empty row (defined as , , , , , ) then it throws a TypeConverterException
Text: ''
MemberType: IntelligentEditing.PerfectIt.Core.DataTypes.Styles.StyleRuleType
TypeConverter: 'CsvHelper.TypeConversion.EnumConverter'
I have gone through the documentation (https://joshclose.github.io/CsvHelper/api/CsvHelper.Configuration/Configuration/) and have tried setting up the configuration object to IgnoreBlankLines = true
however this has not worked.
Simplified for an example:
public enum ItemTypeEnum
{
Unknown = 0,
Accounts = 1,
HR = 2,
}
public class CsvItemDto
{
public int Id { get; set; }
public string Value { get; set; }
public ItemTypeEnum ItemType { get; set; }
}
.
.
.
var configuration = new Configuration()
{
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
IgnoreBlankLines = true,
};
var csv = new CsvReader(textReader, configuration);
var rows = csv.GetRecords<CsvItemDto>();
if (rows != null)
{
var items = rows.ToList();
//Throws exception here
}
The CSV would usually contain something like this:
Id,Value,ItemType
1,This,Unknown
2,That,Accounts
3,Other,HR
,,
,,
I expected the IgnoreBlankLines
to ignore the blank rows in the CSV but it is not. Any ideas?
回答1:
you can try to implement ShouldSkipRecord on Configuration to choose skip or not
var configuration = new Configuration () {
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
IgnoreBlankLines = true,
ShouldSkipRecord = (records) =>
{
// Implement logic here
return false;
}
};
回答2:
@phat.huynh has the right idea. Just tell it to skip any record where all the fields are empty strings.
var configuration = new Configuration()
{
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null,
ShouldSkipRecord = (record) => record.All(field => string.IsNullOrEmpty(field))
};
来源:https://stackoverflow.com/questions/57990749/how-to-ignore-empty-rows-in-csv-when-reading