C# Как правильно считать данные в массив с файла через StreamReader? По заданию, есть базовый класс Human, который имеет в себе переменные Name, LastName, Age и 3 наследующих класса Student, Teacher, TaxiDriver, у которых также свои параметры. Нужно считывая из одного .txt файла данные заполнить 3 объекта ученика, учителя, и водителя, имея следующую структуру файла:Student SOne
{ “Name”: “Андрей”,
“LastName”: “Егоров”,
“studentId”: “123456”
“Age”: “20”};
Teacher TOne
{ “Name”: “Иван”,
“LastName”: “Корчистый”,
“Subject”: “ООП”,
“Age”: “32”};
TaxiDriver DOne
{ “Name”: “Александр”,
“LastName”: “Серый”,
“TaxiName”: “777”,
“Age”: “40”};
Где первое значение (Name, LastName, Age и т.д.) это название переменной, а второе значение - это сами данные.
По заданию необходимо использовать StreamReader, и заполнить каждый объект массивом данных (именно массив, не список) но не могу понять как считать с файла данные и заполнить 3 разных объекта разных классов, да еще и такой структуры, помогите пожалуйста.

21 Авг 2019 в 06:59
186 +1
1
Ответы
1

Для считывания данных из файла и заполнения объектов с помощью StreamReader вам необходимо создать метод, который будет это делать. Вот пример реализации такого метода:

using System;
using System.IO;
class Program
{
static void Main()
{
string file = "data.txt";
using (StreamReader sr = new StreamReader(file))
{
Student student = new Student();
Teacher teacher = new Teacher();
TaxiDriver taxiDriver = new TaxiDriver();
string line;
string className = "";
while ((line = sr.ReadLine()) != null)
{
if (line.Contains("Student") || line.Contains("Teacher") || line.Contains("TaxiDriver"))
{
className = line;
continue;
}
string[] parts = line.Split(':');
string propertyName = parts[0].Trim();
string propertyValue = parts[1].Trim().Trim(';').Trim('"');
switch (className)
{
case "Student SOne":
FillObject(student, propertyName, propertyValue);
break;
case "Teacher TOne":
FillObject(teacher, propertyName, propertyValue);
break;
case "TaxiDriver DOne":
FillObject(taxiDriver, propertyName, propertyValue);
break;
}
}
Console.WriteLine("Student:");
student.PrintInfo();
Console.WriteLine("Teacher:");
teacher.PrintInfo();
Console.WriteLine("TaxiDriver:");
taxiDriver.PrintInfo();
}
}
static void FillObject(Human human, string propertyName, string propertyValue)
{
switch (propertyName)
{
case "Name":
human.Name = propertyValue;
break;
case "LastName":
human.LastName = propertyValue;
break;
case "Age":
human.Age = Convert.ToInt32(propertyValue);
break;
case "studentId":
((Student)human).StudentId = propertyValue;
break;
case "Subject":
((Teacher)human).Subject = propertyValue;
break;
case "TaxiName":
((TaxiDriver)human).TaxiName = propertyValue;
break;
}
}
}
class Human
{
public string Name { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public virtual void PrintInfo()
{
Console.WriteLine($"Name: {Name}");
Console.WriteLine($"LastName: {LastName}");
Console.WriteLine($"Age: {Age}");
}
}
class Student : Human
{
public string StudentId { get; set; }
public override void PrintInfo()
{
base.PrintInfo();
Console.WriteLine($"StudentId: {StudentId}");
}
}
class Teacher : Human
{
public string Subject { get; set; }
public override void PrintInfo()
{
base.PrintInfo();
Console.WriteLine($"Subject: {Subject}");
}
}
class TaxiDriver : Human
{
public string TaxiName { get; set; }
public override void PrintInfo()
{
base.PrintInfo();
Console.WriteLine($"TaxiName: {TaxiName}");
}
}

В данном примере, метод FillObject заполняет объект (student, teacher или taxiDriver) соответствующими значениями из файла. После считывания и заполнения данных, происходит вывод информации об объектах на консоль.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир