Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Menukar Jadual Data kepada Fail CSV dalam C#?

Bagaimana dengan Cekap Menukar Jadual Data kepada Fail CSV dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 15:31:42865semak imbas

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

Penukaran Jadual Data kepada CSV dalam C#

Apabila menyimpan data Jadual Data ke fail CSV, anda mungkin menghadapi masalah dengan pemisahan data yang salah. Penyelesaian disediakan di bawah:

Pertimbangkan kod berikut:

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

Fail CSV yang dibuat oleh kod di atas hanya mengandungi data untuk sel pertama setiap baris. Untuk menyelesaikan masalah ini, pendekatan yang lebih mantap boleh digunakan:

.NET 3.5 dan ke atas

<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 dan ke atas

Untuk .NET 4.0 dan ke atas, kod boleh dipermudahkan lagi:

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

Mengendalikan watak istimewa

Jika anda perlu mengendalikan aksara khas (seperti petikan berganda) dalam medan data, anda boleh mengubah suai blok gelung dalam kod:

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

Selain itu, untuk mengelakkan dokumen besar dalam ingatan, kandungan CSV boleh ditulis baris demi baris dan bukannya menulis keseluruhan dokumen sekaligus.

Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Jadual Data kepada Fail CSV dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn