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를 한 줄씩 작성하면 메모리 효율성이 향상됩니다.
<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를 메모리에 한 번에 로드하는 것을 방지하므로 대규모 데이터 세트를 처리하는 데 적합합니다. using
, System.Data
, System.IO
및 System.Linq
에 필요한 System.Text
문을 포함하는 것을 잊지 마세요.
위 내용은 C#에서 DataTable을 CSV 파일로 올바르게 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!