Считать данные, порядок которых указан в первой строке файла
У меня есть файл вида:
Id;LastName;FirstName;BirthDate
1;Иванов;Иван;01.01.1990
2;Иванова;Мария;01.05.1998
3;Иванов;Петр;01.01.1980
Нужно считать данные, учитывая, что порядок их может меняться, например стать:
BirthDate;LastName;FirstName;Id
01.01.1990;Иванов;Иван;1
01.05.1998;Иванова;Мария;2
01.01.1980;Иванов;Петр;3
Что-то кроме как switch с множеством case ничего не приходит в голову, подскажите, пожалуйста. При чем дальше идет пустая строка и идут данные о их родстве. Возможно это важно, я думаю считывать просто while (str != string.Empty).
Вот пример полного файла на всякий случай:
Id;LastName;FirstName;BirthDate
1;Иванов;Иван;01.01.1990
2;Иванова;Мария;01.05.1998
3;Иванов;Петр;01.01.1980
4;Иванова;Ольга;01.01.1971
5;Петрова;Маргарита;01.01.1972
6;Иванов;Олег;02.03.1995
3<->4=spouse
3<->1=parent
4<->1=parent
5<->3=sibling
6<->4=sibling
Сам файл лежит в формате .txt, поэтому считываю просто:
string[] readedFile = File.ReadAllLines(DataWriter.PathOfFile);
Хочу считать в List<Human>.
Сам класс:
public class Human
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime BirthDate { get; private set; }
}
Вообще, мне нужно считать данные и сохранить в объекты, затем обращаясь например у людей с Id 1 и 2 должен вернуться тип "sibling", хотя этого не было указано в файле явно. Но я не понимаю пока как правильно здесь реализовать объектную модель.
Ответы (1 шт):
Предлагаю следующий подход:
- Создать
enumна основе строковых значений - Создать класс с всеми необходимыми полями
- Спарсить первую строку, чтобы понять последовательность значений относительно типа столбца (enum)
- Спарсить все остальные на основе конструкции
switch case, ориентируясь на последовательность значений из п.3
в рамках псевдокода:
var tmp = someClass();
switch firstRowEnums[i] {
case .id:
tmp.id = cell[i][j];
case .firstName:
tmp.firstName = cell[i][j];
case .lastName:
tmp.lastName = cell[i][j];
case .birth:
tmp.birth = cell[i][j];
}
dataList.add(tmp);
Еще может быть полезным https://ru.stackoverflow.com/a/560134/186752