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>
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>
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!