Travailler avec CSV en C# (.NET) : Guide complet
Le CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. Dans l'écosystème C# (.NET), il existe plusieurs approches pour travailler avec des fichiers CSV : du parsing manuel à l'utilisation de puissantes bibliothèques tierces. Dans cet article, nous allons examiner toutes les principales méthodes de lecture, d'écriture et de traitement des données CSV dans .NET.
1. Parsing manuel du CSV avec StreamReader
La méthode la plus simple consiste à utiliser les classes standard StreamReader et String.Split. Cependant, cette méthode ne prend pas en compte les cas complexes (guillemets, virgules dans les données, sauts de ligne).
using System;using System.IO;using System.Linq;
public class CsvSimpleReader{ public void ReadCsv(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); Console.WriteLine(string.Join(" | ", values)); } } }}Inconvénients : ne traite pas les virgules échappées ni les guillemets. Pour des projets réels, utilisez des méthodes plus fiables.
2. Utilisation de Microsoft.VisualBasic.FileIO.TextFieldParser (pour .NET Framework)
Dans .NET Framework, il existe un analyseur CSV intégré — TextFieldParser. Il gère correctement les guillemets et les séparateurs.
using Microsoft.VisualBasic.FileIO;using System;using System.IO;
public class CsvTextFieldParser{ public void ParseCsv(string filePath) { using (var parser = new TextFieldParser(filePath)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(",");
while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); } } }}Important : Dans .NET Core / .NET 5+, cette classe est disponible via le paquet Microsoft.VisualBasic (NuGet).
3. Bibliothèque CsvHelper (méthode recommandée)
CsvHelper est la bibliothèque la plus populaire pour travailler avec CSV dans .NET. Elle prend en charge le mappage vers des classes, les requêtes LINQ, la configuration des séparateurs et des encodages.
Installation via NuGet :
Install-Package CsvHelper3.1 Lecture d'un CSV dans une liste d'objets
using System.Globalization;using CsvHelper;using CsvHelper.Configuration;using System.IO;using System.Linq;using System.Collections.Generic;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
public void ReadCsvWithCsvHelper(string filePath){ var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, Delimiter = ",", MissingFieldFound = null };
using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<Person>().ToList(); foreach (var person in records) { Console.WriteLine($"{person.Name}, {person.Age}, {person.Email}"); } }}3.2 Écriture d'un CSV à partir d'une collection d'objets
public void WriteCsvWithCsvHelper(string filePath, List<Person> people){ using (var writer = new StreamWriter(filePath)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteRecords(people); }}3.3 Gestion manuelle des champs (sans mappage)
public void ManualCsvWrite(string filePath){ using (var writer = new StreamWriter(filePath)) using (va Aussi dans la bibliothèque
Sérialisation d'objets en Swift (iOS/macOS) : Codable, JSON et PropertyList
Travailler avec les dates en PHP : aperçu des bibliothèques et outils
Bull pour JavaScript (Node.js) : guide complet avec exemples
Traitement JSON en C# (.NET) : Guide complet sur Newtonsoft.Json et System.Text.Json