Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Menukar Jadual Data kepada Fail CSV dalam 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!