C# 資料表到 CSV 的轉換:改進的技術和除錯
將 DataTable 轉換為 CSV 檔案需要仔細注意資料分離。 如果您的資料聚集在每行的第一個儲存格中,則問題可能源自於不正確的分隔符號和換行符處理。
使用 StringBuilder
的原始程式碼的行值附加邏輯可能有缺陷。 問題可能是逗號位置 - 它會加在 每個 值之後,而不是只加在每行的最後一個值之後。
這是解決此問題的程式碼的改進版本:
<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>
或者,使用 LINQ(在 .NET 4.0 及更高版本中可用)的更有效率、更優雅的方法如下所示:
<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>
這個基於 LINQ 的解決方案簡化了列和行迭代,採用 string.Join
進行簡潔的分隔符號插入。 由於其可讀性和效率,這種方法通常是首選。
以上是如何在 C# 中有效率地將 DataTable 轉換為 CSV 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!