В данной статье мы поработаем с файлом csv. В первой части мы разберём чтение, а во второй запись. Работать будем с простым консольным приложением, а также библиотекой CsvHelper. Её вы можете установить при помощи NuGet.
Чтение csv файла
Ниже привожу пример csv, который я буду использовать (programmingLanguages.csv):
Name,Developer J#,Microsoft Pico,Vrije Universiteit Brussel NWScript,BioWare ELAN,Technical University of Berlin Alice ML,Saarland University
Мы можем прочитать файл при помощи следующего программного кода:
using CsvHelper; using System.Collections; using System.IO; namespace Csv { public class ProgrammingLanguage { public string Name { get; set; } public string Developer { get; set; } } class Program { static void Main(string[] args) { // указываем путь к файлу csv string pathCsvFile = "D:\\programmingLanguages.csv"; using (StreamReader streamReader = new StreamReader(pathCsvFile)) { using (CsvReader csvReader = new CsvReader(streamReader)) { // указываем используемый разделитель csvReader.Configuration.Delimiter = ","; // получаем строки IEnumerable programmingLanguages = csvReader.GetRecords<ProgrammingLanguage>(); } } } } }
Если свойства в классе отличаются от заголовков в файле, то вы можете указать для каждого свойства класса NameAttribute:
programmingLanguages.csv:
Название языка,Разработчик J#,Microsoft Pico,Vrije Universiteit Brussel NWScript,BioWare ELAN,Technical University of Berlin Alice ML,Saarland University
Добавляем NameAttribute в класс ProgrammingLanguage:
public class ProgrammingLanguage { [Name("Название языка")] public string Name { get; set; } [Name("Разработчик")] public string Developer { get; set; } }
Если у вас нет заголовка в csv файле, то вам нужно указать это в конфигурации:
using (CsvReader csvReader = new CsvReader(streamReader)) { csvReader.Configuration.HasHeaderRecord = false; csvReader.Configuration.Delimiter = ","; IEnumerable programmingLanguages = csvReader.GetRecords<ProgrammingLanguage>(); }
Запись в файл csv
Привожу ниже программный код:
using CsvHelper; using System.Collections.Generic; using System.IO; namespace Csv { public class ProgrammingLanguage { public string Name { get; set; } public string Developer { get; set; } } class Program { static void Main(string[] args) { // указываем путь к файлу csv string pathCsvFile = "D:\\programmingLanguages.csv"; // добавляем тестовые данные, которые будем записывать в csv файл List<ProgrammingLanguage> programmingLanguages = new List<ProgrammingLanguage> { new ProgrammingLanguage { Name = "J#", Developer = "Microsoft" }, new ProgrammingLanguage { Name = "Pico", Developer = "Vrije Universiteit Brussel" }, new ProgrammingLanguage { Name = "NWScript", Developer = "BioWare" } new ProgrammingLanguage { Name = "ELAN", Developer = "Technical University of Berlin" } new ProgrammingLanguage { Name = "Alice ML", Developer = "Saarland University" } }; using (StreamWriter streamReader = new StreamWriter(pathCsvFile)) { using (CsvWriter csvReader = new CsvWriter(streamReader)) { // указываем разделитель, который будет использоваться в файле csvReader.Configuration.Delimiter = ","; // записываем данные в csv файл csvReader.WriteRecords(programmingLanguages); } } } } }