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 내용을 한 줄씩 작성할 수 있습니다.
위 내용은 C#에서 DataTable을 CSV 파일로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!