C# DataTable から 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 中国語 Web サイトの他の関連記事を参照してください。