Maison > développement back-end > C++ > Comment puis-je convertir efficacement un DataTable en fichier CSV en C# ?

Comment puis-je convertir efficacement un DataTable en fichier CSV en C# ?

Linda Hamilton
Libérer: 2025-01-15 15:52:44
original
714 Les gens l'ont consulté

How Can I Efficiently Convert a DataTable to a CSV File in C#?

Conversion C# DataTable en CSV : techniques et débogage améliorés

La conversion d'un DataTable en fichier CSV nécessite une attention particulière à la séparation des données. Si vos données apparaissent regroupées dans la première cellule de chaque ligne, le problème provient probablement d'une gestion incorrecte des délimiteurs et des sauts de ligne.

Le code d'origine, utilisant un StringBuilder, peut avoir un défaut dans sa logique d'ajout de valeur de ligne. Le problème vient probablement de l'emplacement de la virgule : elle est ajoutée après chaque valeur, pas seulement après la dernière valeur de chaque ligne.

Voici une version affinée du code pour résoudre ce problème :

<code class="language-csharp">StringBuilder sb = new StringBuilder();

foreach (DataRow row in dt.Rows)
{
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        sb.Append(row[i].ToString());
        if (i < dt.Columns.Count - 1)
        {
            sb.Append(","); // Add comma only before the last column
        }
    }
    sb.AppendLine(); // Add line break after each row
}

File.WriteAllText("test.csv", sb.ToString());</code>
Copier après la connexion

Alternativement, une approche plus efficace et élégante utilisant LINQ (disponible dans .NET 4.0 et versions ultérieures) est présentée ci-dessous :

<code class="language-csharp">StringBuilder sb = new StringBuilder();

IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("test.csv", sb.ToString());</code>
Copier après la connexion

Cette solution basée sur LINQ rationalise l'itération des colonnes et des lignes, en utilisant string.Join pour une insertion concise de délimiteurs. Cette méthode est généralement privilégiée pour sa lisibilité et son efficacité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal