ホームページ >バックエンド開発 >C++ >C# で DataTable を CSV ファイルに効率的に変換するにはどうすればよいですか?

C# で DataTable を CSV ファイルに効率的に変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-15 15:31:42862ブラウズ

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

C# での DataTable の CSV への変換

DataTable データを CSV ファイルに保存するときに、データが正しく分離されていないという問題が発生する可能性があります。解決策は以下に提供されます:

次のコードを考えてみましょう:

<code class="language-csharp">StringBuilder sb = new StringBuilder();
foreach (DataColumn col in dt.Columns)
{
    sb.Append(col.ColumnName + ',');
}
sb.Remove(sb.Length - 1, 1);
sb.Append(Environment.NewLine);

foreach (DataRow row in dt.Rows)
{
    // ... (此处代码仅写入每一行的第一个单元格数据) ...
}

File.WriteAllText("test.csv", sb.ToString());</code>

上記のコードで作成された CSV ファイルには、各行の最初のセルのデータのみが含まれています。この問題を解決するには、より堅牢なアプローチを使用できます。

.NET 3.5 以降

<code class="language-csharp">StringBuilder sb = new StringBuilder();
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(",", columnNames));

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

File.WriteAllText("test.csv", sb.ToString());</code>

.NET 4.0 以降

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

特殊文字の処理

データ フィールドで特殊文字 (二重引用符など) を処理する必要がある場合は、コード内のループ ブロックを変更できます。

<code class="language-csharp">foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field =>
        string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
    sb.AppendLine(string.Join(",", fields));
}</code>

さらに、メモリ内の大きなドキュメントを避けるために、CSV コンテンツはドキュメント全体を一度に書き込むのではなく、1 行ずつ書き込むことができます。

以上がC# で DataTable を CSV ファイルに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。