Travailler avec CSV en C# (.NET) : de l'analyse simple à la bibliothèque avancée
CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. Dans l'écosystème .NET, il existe plusieurs approches pour travailler avec CSV : des outils intégrés aux bibliothèques spécialisées. Dans cet article, nous passerons en revue toutes les méthodes principales, montrerons des exemples de code et vous aiderons à choisir l'outil optimal pour votre projet.
1. Outils intégrés .NET (analyse manuelle)
La méthode la plus simple consiste à utiliser les classes StreamReader et String.Split. Cependant, cette méthode ne gère pas l'échappement des guillemets et des virgules à l'intérieur des champs, elle ne convient donc que pour les fichiers CSV simples sans données complexes.
using System;using System.IO;using System.Linq;
public class SimpleCsvReader{ public static void ReadCsv(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); // Traitement de la ligne Console.WriteLine(string.Join(" | ", values)); } } }}Inconvénients : ne traite pas les guillemets, ne prend pas en charge les champs multilignes, pas de typage.
2. Utilisation de TextFieldParser (Microsoft.VisualBasic)
La classe TextFieldParser de l'espace de noms Microsoft.VisualBasic.FileIO sait gérer correctement les CSV avec guillemets et séparateurs. Pour l'utiliser, ajoutez une référence à l'assembly Microsoft.VisualBasic.
using Microsoft.VisualBasic.FileIO;using System;
public class TextFieldParserExample{ public static void ParseCsv(string filePath) { using (var parser = new TextFieldParser(filePath)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); } } }}Cette méthode est déjà meilleure, mais nécessite toujours un mappage manuel des champs vers les objets.
3. Bibliothèque CsvHelper — l'étalon-or
CsvHelper est la bibliothèque la plus populaire pour travailler avec CSV dans .NET. Elle offre une prise en charge complète de la norme RFC 4180, un mappage automatique sur les classes, le support de LINQ et des performances élevées.
Installation
dotnet add package CsvHelperExemple de lecture CSV dans une liste d'objets
using CsvHelper;using CsvHelper.Configuration;using System.Globalization;using System.IO;using System.Linq;
public class Person{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public DateTime BirthDate { get; set; }}
public class CsvHelperReader{ public static List<Person> ReadPeople(string filePath) { using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { return csv.GetRecords<Person>().ToList(); } }}Exemple d'écriture CSV à partir d'une collection
public static void WritePeople(string filePath, List<Person> people){ using (var writer = new StreamWriter(filePath)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteRecords(people); }}Configuration avancée
var config = new CsvConfiguration(CultureInfo.InvariantCulture){ HasHeaderRec