Я пытаюсь построить систему управления транспортными средствами, и я довольно плохо знаком с C#. Как только я перехожу к приведенному ниже коду, который должен искать автомобиль по регистрационному номеру, отображать информацию о выбранном транспортном средстве, прежде чем разрешить пользователю перезаписывать информацию, а затем сохранять ее обратно в файл, появляется сообщение об ошибке * 1001. * System.FormatException: 'Входная строка была не в правильном формате.' в строке select new Vehicle()
первой IEnumerable
. Мой CSV-файл выглядит так:
[Регистрация] [Оценка] [Марка] [Марка] [Модель] [Год] [NumSeats] [Трансмиссия] [Топливо] [GPS] [SunRoof] [DailyRate ] [Цвет]
[123ABC] [Экономика] [Toyota] [Camry] [2005] [5] [Автоматически] [Бензин] [FALSE] [FALSE] [25] [ Белый]
[321CBA] [Экономика] [Toyota] [Camry] [2020] [5] [Автоматически] [Pertol] [TRUE] [FALSE] [75] [Silver]
У меня такое ощущение, что я могу использовать IEnumerable
неправильно или просто не разбираю нужную информацию. Я отформатировал код, чтобы его было легче взять и отладить:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
public class Vehicle
{
public string Registration
{get; set;}
public string Grade
{get; set;}
public string Make
{get; set;}
public string Model
{get; set;}
public int Year
{get; set;}
public int NumSeats
{get; set;}
public string Transmission
{get; set;}
public string Fuel
{get; set;}
public bool GPS
{get; set;}
public bool SunRoof
{ get; set;}
public double DailyRate
{get; set;}
public string Colour
{get; set;}
}
static IEnumerable<Vehicle> GetVehicles(string file, char separator) // used to retrieve the line of vehicle information for the modify vehicle option
{
return
from line in File.ReadLines(file).Skip(1)
let fields = line.Split(separator)
select new Vehicle()
{
Registration = fields[0],
Grade = fields[1],
Make = fields[2],
Model = fields[3],
Year = Convert.ToInt32(fields[4]),
NumSeats = Convert.ToInt32(fields[5]),
Transmission = fields[6],
Fuel = fields[7],
GPS = Convert.ToBoolean(fields[8]),
SunRoof = Convert.ToBoolean(fields[9]),
DailyRate = Convert.ToInt32(fields[10]),
Colour = fields[11]
};
}
static void SaveVehicles(string file, char separator, string[] headers, IEnumerable<Vehicle> vehicles) // used to write the modified customer information to the file
{
IEnumerable<string[]> parts =
from v in vehicles
select new[]
{
v.Registration,
v.Grade,
v.Make,
v.Model,
v.Year.ToString(),
v.NumSeats.ToString(),
v.Transmission,
v.Fuel,
v.GPS.ToString(),
v.SunRoof.ToString(),
v.DailyRate.ToString(),
v.Colour
};
IEnumerable<string> lines =
from ps in new[] { headers }.Concat(parts)
select String.Join(separator.ToString(), ps);
File.WriteAllLines(file, lines);
}
static void Main(string[] args)
{
const string FILENAME = "D://fleet.csv";
const char DELIM = ',';
const string END = "QUIT";
string[] headers = new[] { "Registration", "Grade", "Make", "Model", "Year", "NumSeats", "Transmission", "Fuel", "GPS", "SunRoof", "DailyRate", "Colour" };
List<Vehicle> vehicles = GetVehicles(FILENAME, DELIM).ToList(); // Calling .ToList() to force read the file.
var registration = "";
while (registration != END)
{
Console.WriteLine(" **Type " + END + " To Quit** Enter Vehicle Registration> ");
registration = Console.ReadLine();
Console.WriteLine("{0,10}{1,15}{2,15}{3,15}{4,10}{5,10}{6,15}{7,15}{8,15}{9,15}{10,15}{11,15}\n", headers);
foreach (var vehicle in vehicles.Where(x => x.Registration == registration))
{
Console.WriteLine("{0,10}{1,15}{2,15}{3,15}{4,10}{5,10}{6,15}{7,15}{8,15}{9,15}{10,15}{11,15}\n", vehicle.Registration, vehicle.Grade, vehicle.Make, vehicle.Model, vehicle.Year, vehicle.NumSeats, vehicle.Transmission, vehicle.Fuel, vehicle.GPS, vehicle.SunRoof, vehicle.DailyRate, vehicle.Colour);
Console.Write(" Grade> ");
vehicle.Grade = Console.ReadLine();
Console.Write(" Make> ");
vehicle.Make = Console.ReadLine();
Console.Write(" Model> ");
vehicle.Model = Console.ReadLine();
Console.Write(" Year Of Vehicle Model> ");
vehicle.Year = Convert.ToInt32(Console.ReadLine());
Console.Write(" Number Of Seats> ");
vehicle.NumSeats = Convert.ToInt32(Console.ReadLine());
Console.Write(" Transmission> ");
vehicle.Transmission = Console.ReadLine();
Console.Write(" Fuel Type> ");
vehicle.Fuel = Console.ReadLine();
Console.Write(" GPS> ");
vehicle.GPS = Convert.ToBoolean(Console.ReadLine());
Console.Write(" Sunroof> ");
vehicle.SunRoof = Convert.ToBoolean(Console.ReadLine());
Console.Write(" Daily Rate> ");
vehicle.DailyRate = Convert.ToInt32(Console.ReadLine());
Console.Write(" Colour> ");
vehicle.Colour = Console.ReadLine();
}
}
var saveFileName = FILENAME.Replace(".csv", ".csv-temp"); // Saving to a temp file and then swapping to normal file
if (File.Exists(saveFileName))
{
File.Delete(saveFileName);
}
SaveVehicles(saveFileName, DELIM, headers, vehicles);
if (File.Exists(saveFileName) && File.Exists(FILENAME))
{
File.Delete(FILENAME);
File.Move(saveFileName, FILENAME);
}
}
}
}
Любая помощь будет признательна