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

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

Barbara Streisand
リリース: 2025-01-15 15:41:44
オリジナル
452 人が閲覧しました

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

C# で DataTable を CSV ファイルに効率的に変換する

DataTable を CSV ファイルに変換することは、データ処理において頻繁に行われる操作です。 ただし、不適切に処理するとデータ破損が発生する可能性があり、多くの場合、各行の最初のセル内に値が連結されてしまいます。このガイドでは、よくある落とし穴を回避する正しいアプローチを説明します。

一般的なエラーへの対処:

よくある間違いとしては、各行の末尾に余分なカンマを追加して、データの不整合が発生することが挙げられます。 この例では、その問題を回避します。

最適な実装:

.NET 4.0 以降の場合:

この最適化されたコード スニペットは、DataTable を CSV ファイルに効率的に変換します。

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

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>
ログイン後にコピー

このコードは、各フィールドを二重引用符で囲み、フィールド内の既存の二重引用符をエスケープします。

メモリ管理の改善: 行ごとの書き込み:

非常に大きな DataTable の場合、CSV を 1 行ずつ書き込むとメモリ効率が向上します。

<code class="language-csharp">using (var writer = new StreamWriter("test.csv"))
{
    writer.WriteLine(string.Join(",", dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName)));
    foreach (DataRow row in dt.Rows)
    {
        writer.WriteLine(string.Join(",", row.ItemArray.Select(field => string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""))));
    }
}</code>
ログイン後にコピー

このアプローチでは、CSV 全体を一度にメモリにロードする必要がなくなり、大規模なデータセットの処理に適しています。 usingSystem.DataSystem.IO、および System.Linq に必要な System.Text ステートメントを忘れずに含めてください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート