2013-02-18 3 views
3

DataTable을 CSV 파일로 변환하는 코드를 채택했습니다. 실제 데이터에서 쉼표가 사용되는 경우를 제외하고는 제대로 작동하는 것 같습니다. 이 경우 쉼표를 표시하는 방법이 있습니까? 이것이 내가 한 것입니다 :DataTable을 CSV로 내보낼 때 쉼표 문제가 발생했습니다.

+0

가능한 중복 http://stackoverflow.com/questions/4123875/commas-within-csv-data) – ChrisF

+0

또 다른 가능한 중복 : http://stackoverflow.com/questions/769621/dealing-with-commas-in-a-csv-file –

+0

'field.ToString() ''NullReferenceException'을 일으킬 수 있습니다. 'string.Join (","row.ItemArray)'를 사용하십시오. –

답변

7

필드에 쉼표가 있으면 이중 따옴표로 묶어야합니다.

FileHelpers library을 사용하여 CSV 파일을 만들 수 있습니다. 제대로 탈출해야합니다.

라이브러리를 사용하지 않으려는 경우 필수 항목은 다음과 같습니다. 쉼표가 있으면 필드를 따옴표 안에 넣어야합니다. 당신의 분야 따옴표가 포함 된 경우

ID, NAME 
1, "Doe, John" 
2, 'Doe, Jane' 

, 당신은 추가 견적을 탈출해야합니다

3, "Anakin ""Darth Vader"", Skywalker" 
4, 'O''Connor, Sinead' 

가능한 솔루션 :

static string CsvEscape(this string value) { 
    if (value.Contains(",")) { 
     return "\"" + value.Replace("\"", "\"\"") + "\""; 
    } 
    return value; 
} 

그리고 다음 코드 :

IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().CsvEscape()); 

추 신 : accor Wikipedia으로 보내면 실제 csv 사양은 없지만 RFC 4180은 자주 사용되는 형식을 설명합니다.

+0

"OP"를 그의 코드의 많은 부분으로 저장하려면 필드 선택에서'@ "\" "+ field @"\ ""'를 사용하십시오 ? :) – LukeHennerley

+0

@ LukeHennerley - 친절하게 설명해 주시겠습니까? :) –

+0

@DotNET 분리자를 데이터 안에 넣을 수있는 상황이 있다면 이중 따옴표로 데이터를 싸야합니다. "" " – LukeHennerley

0

아래 수정 코드가 게시되어 도움이 될 것입니다.

StringBuilder sb = new StringBuilder(); 

      string[] val = { "ramesh","suresh, Ganesh" }; 
      IEnumerable<string> columnNames = val; 

      IList<string> objFinal = new List<string>(); 
      foreach (string v in columnNames) 
      { 
       string temp = v; 
       if (temp.Contains(",")) 
        temp = "\"" + v + "\""; 

       objFinal.Add(temp); 
      } 
      sb.AppendLine(string.Join(",", objFinal.AsEnumerable<string>())); 

      }    

CSV는 두 코드 간의 데이터에서 쉼표를 지원합니다.

당신은 코드의 아래에 한 줄의 도움으로 하나의 샷 이중 코드뿐만 아니라 쉼표를 추가 할 수 있습니다

IEnumerable<string> columnNames = dtResults.Columns 
              .Cast<DataColumn>() 
              .Select(column => column.ColumnName); 

var res = columnNames.Aggregate((current, next) => "\"" + current + "\"" + ", " + "\"" + next + "\""); 


File.WriteAllText(saveFileDialog.FileName, res.ToString()); 
[CSV 데이터에서 쉼표] (의
관련 문제