Таким образом, после того, как в отчаянии я потратил около часа, я решил последовать совету всех присутствующих, и не реализовал мой собственный CSV-парсер .
Поэтому я выбрал FileHelpers .
Но у меня возникли проблемы с его правильным использованием.
Мой CSV-файл выглядит примерно так:
50382018,50319368,eBusiness Manager,IT02,3350_FIB4,IT,2480
50370383,50373053,CRM Manager,IT01,3200_FIB3,xyz,2480
50320067,50341107,"VP, Business Information Officer",IT03,3200_FI89,xyz,2480
50299061,50350088,Project Expert,IT02,8118_FI09,abc,2480
Моя потребность в FileHelpers (и, в частности, CsvEngine
) находится в строке 3 - обратите внимание на третий столбец, заключенный в кавычки, поскольку он имеет внутреннюю запятую (которая в противном случае используется в качестве разделителя).
Мой код для чтения файла:
var co = new FileHelpers.Options.CsvOptions("Employee", columnDeliminator, 7);
var ce = new CsvEngine(co);
var records = ce.ReadFile(pathToCSVFile);
Работает нормально - вроде. Он правильно анализирует строки и распознает значения с заключенными в них разделителями.
Но.
Возвращаемое значение ReadFile()
-метода равно object[]
. И его содержимое выглядит как динамический тип.
Это выглядит примерно так - где столбцы названы "Field_1", "Field_2" и т. Д.
Я создал «класс данных», предназначенный для хранения проанализированных строк. Это выглядит так:
public class Employee
{
public string DepartmentPosition;
public string ParentDepartmentPosition;
public string JobTitle;
public string Role;
public string Location;
public string NameLocation;
public string EmployeeStatus;
}
Есть ли способ получить класс FileHelpers CsvEngine
для возврата строго типизированных данных?
Если бы я мог просто использовать «базовый» парсер FileHelpers, я мог бы использовать этот код:
var engine = new FileHelperEngine<Employee>();
var records = engine.ReadFile("Input.txt");
Есть ли способ получить CsvEngine
возвращаемых экземпляров моего класса "Сотрудник"? Или я должен написать свой собственный код отображения для поддержки этого?