Как я могу читать и анализировать файл, разделенный точкой с запятой, на объекты в C# чистым и читаемым способом?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу читать и анализировать файл, разделенный точкой с запятой, на объекты в C# чистым и читаемым способом?

Сообщение Anonymous »

  • Я работаю с простым текстовым файлом, содержащим данные об автомобиле, и мне хотелось бы проанализировать его на строго типизированные объекты на C#.
    Структура файла выглядит следующим образом:

    Код: Выделить всё

    Brand;Model;FuelType;Year;Price
    Toyota;Corolla;Petrol;2018;15000
    Ford;Focus;Diesel;2016;12000
    
    В некоторых случаях несколько записей могут отображаться в одной строке, разделенных пробелами.
    Моя цель — сделать код простым для чтения и обслуживания, а не просто заставить его работать.
    Каким будет чистый и понятный способ:

    прочитать файл
  • разобрать файл данные
  • хранят их в списке объектов
Вот мой подход:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.IO;

namespace Assignment
{
internal class Car
{
public string Brand { get; set; }
public string Model { get; set; }
public string FuelType { get; set; }
public int Year { get; set; }
public int Price { get; set; }

public Car(string brand, string model, string fuelType, int year, int price)
{
Brand = brand;
Model = model;
FuelType = fuelType;
Year = year;
Price = price;
}

public static List ReadFromFile()
{
List cars = new List();

// Read all lines (first line is header)
string[] lines = File.ReadAllLines("cars.txt");

for (int i = 1; i < lines.Length; i++)
{
// A line may contain multiple records separated by space
string[] records = lines[i].Split(' ');

for (int j = 0; j < records.Length; j++)
{
// Each record is separated by semicolon
string[] data = records[j].Split(';');

Car car = new Car(
data[0],
data[1],
data[2],
int.Parse(data[3]),
int.Parse(data[4])
);

cars.Add(car);
}
}

return cars;
}
}
}

Вы также можете пойти еще дальше и отделить логику чтения файлов от кода, который работает с анализируемыми объектами.
Например, после того, как Car.ReadFromFile() возвращает список, вы можете сохранить этот список внутри другого класса, ответственного за запрос или обработку данных:

Код: Выделить всё

using System;
using System.Collections.Generic;
namespace Assignment
{
internal class CarManager
{

private List cars;

public CarManager()
{
cars = Car.ReadFromFile();
}

public int CountCars()
{
return cars.Count;
}
}

class Program
{
static void Main(string[] args)
{
CarManager manager = new CarManager();

Console.WriteLine("Total cars: " + manager.CountCars());
}
}
}
Как я могу улучшить этот код, чтобы сделать его более читабельным и надежным?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»