На основе документации CsvHelper существует несколько способов достижения желаемых результатов.
1. Игнорировать пробелы в заголовках (что, по моему мнению, должно легко решить вашу проблему)
В CsvHelper 3 или новее используйте PrepareHeaderForMatch
(задокументировано на http://joshclose.github.io/CsvHelper/configuration#headers), чтобы удалить пробелы из заголовков:
csv.Configuration.PrepareHeaderForMatch =
header => Regex.Replace(header, @"\s", string.Empty)
В CsvHelper 2 установите флаг IgnoreHeaderWhiteSpace
, который указывает читателю игнорировать пробелы в заголовках при сопоставлении столбцов со свойствами по имени.
reader.Configuration.IgnoreHeaderWhiteSpace = true;
2. Читать вручную
Мы можем прочитать каждое поле вручную, например:
var reader = new CsvReader(sr);
do
{
reader.Read();
var record=new DataRecord();
record.TimeOfDay=reader.GetField<string>("Time of Day");
record.ProcessName=reader.GetField<string>("Process Name");
record.PID=reader.GetField<string>("PID");
record.Operation=reader.GetField<string>("Operation");
record.Path=reader.GetField<string>("Path");
record.Result=reader.GetField<string>("Result");
record.Detail=reader.GetField<string>("Detail");
record.ImagePath=reader.GetField<string>("Image Path");
} while (!reader.IsRecordEmpty());
3. Сопоставление классов:
Мы можем вручную сопоставить свойства нашего класса и заголовки в файле CSV, используя name class mapping
следующим образом:
public sealed class DataRecordMap:CsvClassMap<DataRecord>
{
public DataRecordMap()
{
Map( m => m.TimeOfDay).Name("Time Of Day");
Map( m => m.ProcessName).Name("Process Name");
Map( m => m.PID).Name("PID");
Map( m => m.Operation).Name("Operation");
Map( m => m.Path).Name("Path");
Map( m => m.Result).Name("Result");
Map( m => m.Detail).Name("Detail");
Map( m => m.ImagePath).Name("Image Path");
}
}
Затем мы должны зарегистрировать его, используя:
reader.Configuration.RegisterClassMap<DataRecordMap>();
person
user3473830
schedule
08.11.2014