Les fichiers CSV (Comma Separated Values) sont un format omniprésent pour le stockage de données tabulaires. Cet article présente deux méthodes C# efficaces pour lire les fichiers CSV et stocker leur contenu dans des tableaux. Nous explorerons une approche manuelle utilisant la classe StreamReader
et une solution plus simplifiée utilisant la classe TextFieldParser
de la bibliothèque Microsoft.VisualBasic.FileIO
.
Table des matières
Lecture de fichiers CSV avec StreamReader
L’approche StreamReader
offre un contrôle granulaire sur le processus de lecture, permettant une personnalisation pour divers formats CSV. Cependant, elle exige une gestion plus manuelle des délimiteurs et des conditions d’erreur.
using System;
using System.IO;
public class CsvReaderStreamReader
{
public static string[][] ReadCsv(string filePath)
{
string[][] data = new string[0][]; // Initialisation comme tableau vide
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
Array.Resize(ref data, data.Length + 1);
data[data.Length - 1] = values;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Erreur lors de la lecture du fichier CSV : {ex.Message}");
}
return data;
}
public static void Main(string[] args)
{
string filePath = "data.csv";
string[][] csvData = ReadCsv(filePath);
if (csvData != null)
{
foreach (string[] row in csvData)
{
Console.WriteLine(string.Join(" ", row));
}
}
}
}
Ce code amélioré redimensionne dynamiquement le tableau, évitant la limitation de taille initiale arbitraire. Il utilise également l’interpolation de chaînes pour des messages d’erreur plus propres et string.Join
pour une sortie concise.
Lecture de fichiers CSV avec TextFieldParser
Le TextFieldParser
simplifie l’analyse CSV, en particulier pour les fichiers complexes avec des champs entre guillemets ou des délimiteurs personnalisés. Il gère automatiquement ces complexités.
using Microsoft.VisualBasic.FileIO;
using System;
public class CsvReaderTextFieldParser
{
public static string[][] ReadCsv(string filePath)
{
string[][] data = new string[0][];
try
{
using (TextFieldParser parser = new TextFieldParser(filePath))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
Array.Resize(ref data, data.Length + 1);
data[data.Length - 1] = fields;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Erreur lors de la lecture du fichier CSV : {ex.Message}");
}
return data;
}
public static void Main(string[] args)
{
string filePath = "data.csv";
string[][] csvData = ReadCsv(filePath);
if (csvData != null)
{
foreach (string[] row in csvData)
{
Console.WriteLine(string.Join(" ", row));
}
}
}
}
Ce code gère efficacement l’analyse CSV à l’aide de TextFieldParser
. N’oubliez pas d’ajouter une référence à l’assembly Microsoft.VisualBasic
dans votre projet.
Comparaison des méthodes
Les deux méthodes obtiennent le même résultat, mais TextFieldParser
est généralement préféré pour sa robustesse et sa facilité d’utilisation, en particulier avec les fichiers CSV complexes. StreamReader
offre plus de contrôle pour les scénarios spécialisés, mais nécessite une gestion minutieuse des erreurs et des délimiteurs.