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
232 +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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир