- Я работаю с простым текстовым файлом, содержащим данные об автомобиле, и мне хотелось бы проанализировать его на строго типизированные объекты на 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());
}
}
}
Мобильная версия