2013-02-18 47 views
3

我已經採用了將DataTable轉換爲CSV文件的一些代碼。除了在實際數據中使用逗號之外,它似乎工作得很好。在這種情況下有沒有辦法顯示逗號?這是我所做的:將DataTable導出爲CSV時的逗號問題

+0

可能重複http://stackoverflow.com/questions/4123875/commas-within-csv-data) – ChrisF 2013-02-18 14:00:13

+0

另一個可能的重複:http://stackoverflow.com/questions/769621/dealing-with-commas-in-a-csv-file – 2013-02-18 14:01:10

+0

'field.ToString() '會導致'NullReferenceException'。使用'string.Join(「,」,row.ItemArray)' – 2013-02-18 14:02:55

回答

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()); 

PS:accor直到Wikipedia沒有真正的csv規範,但RFC 4180描述了經常使用的格式。

+0

或者將OP改爲他的大部分代碼,在選擇的字段中使用'@「\」「+ field @」\「」' ? :) – LukeHennerley 2013-02-18 14:05:42

+0

@LukeHennerley - 請您詳細說明一下嗎? :) – 2013-02-18 14:08:24

+0

@DotNET如果你有一種情況,你可以讓你的分隔符在一些數據中,你應該用雙引號括起數據''「' – LukeHennerley 2013-02-18 14:16:09

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數據中逗號(的