C# Programming

Lecture efficace de fichiers CSV et stockage dans des tableaux en C#

Spread the love

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *