Formát CSV (Comma Separated Values) je textový formát, který, jak jeho název napovídá, odděluje jednotlivé hodnoty čárkou. Kromě čárky jsou povolené i jiné oddělovače jako například středník.
Tento formát se používá pro uložení tabulkových dat (řádky × sloupce ) a je používaný mimo jiné pro export/import dat mezi aplikacemi. Jeho velkou výhodou je jednoduchost na čtení lidmi i strojové zpracování.
Podoba CSV
Tabulková podoba:
| Jméno | Věk | Město |
|---|---|---|
| Alice | 30 | Praha |
| Bob | 25 | Brno |
CSV podoba:
Jméno,Věk,Město
Alice,30,Praha
Bob,25,BrnoOddělovače
Pro oddělení hodnot lze využít čárku. V Evropě se preferuje využití středníku, a to z důvodu, že čárka se používá jako oddělovač desetinných čísel.
CSV podoba:
Jméno;Věk;Město
Alice;30;Praha
Bob;25;BrnoVýznam uvozovek
Data mohou obsahovat znaky, které se shodují se zvoleným oddělovačem, ale neměla by být tak interpretována. Pro to lze využít uvozovky, které dokáží vyřešit když obsah obsahuje:
- oddělovač
- nový řádek
- uvozovky
Jméno,Adresa
Alice,"Dlouhá 10, Praha"
Bob,"Krátká 5, Brno"Pokud je uvnitř textu uvozovka, zapisuje se zdvojená:
Jméno,Popis
Alice,"Řekla ""Ahoj!"""Práce s CSV v .NET
Pro jednoduchá CSV lze serializaci a deserializaci dat implementovat vlastnoručně, nicméně existují již existující implementace jako například CsvHelper.
Ukázka práce s CsvHelper
Na začátek je nutné si nainstalovat nuget balíček CsvHelper.
Model
public class Person
{
public required string Name { get; set; }
public required int Age { get; set; }
public required string City { get; set; }
}Serializace
var fileName = "people.csv";
var people = new List<Person>
{
new Person { Name = "Alice", Age = 30, City = "Praha" },
new Person { Name = "Bob", Age = 25, City = "Brno" }
};
using var writer = new StreamWriter(fileName);
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(people);Name,Age,City
Alice,30,Praha
Bob,25,BrnoWarning
Ukázka pro zjednodušení neřeší správné ošetření výjimek. To je pro zajištění stability aplikace při práci se soubory na disku klíčové. Více v Výjimky.
Deserializace
var fileName = "people.csv";
using var reader = new StreamReader(fileName);
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
var records = csv.GetRecords<Person>().ToList();
foreach (var person in records)
{
Console.WriteLine($"{person.Name} ({person.Age}) z města {person.City}");
}Warning
Ukázka pro zjednodušení neřeší správné ošetření výjimek. To je pro zajištění stability aplikace při práci se soubory na disku klíčové. Více v Výjimky.