2016-01-28 43 views
0

Attached image represents sample datatable這是我的代碼將數據錶轉換爲CSV。在我的行中,值包含許多逗號。因此,值顯示未定義的格式,而用逗號分隔符創建一個CSV如何在將Datatable轉換爲csv時刪除行值中不需要的逗號?

StringBuilder tempsb = new StringBuilder(); 

    IEnumerable<string> columnNames = table.Columns.Cast<DataColumn>(). 
           Select(column => column.ColumnName); 
    tempsb.AppendLine(string.Join(",", columnNames)); 

    foreach (DataRow row in table.Rows) 
    { 
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString()); 
     tempsb.AppendLine(string.Join(",", fields)); 
    } 

    File.WriteAllText("sample.csv", tempsb.ToString()); 
+0

1)與您正在使用的編程語言的標籤,2)告訴我們從您的CSV文件樣本,以及3)清理您的格式。 –

+2

使用其他內容替換'fields'中的逗號,使用「封裝字段」或使用其他分隔字符(如';') – Chrisi

+1

如果用戶在他的表單中輸入「;」,會不會出現同樣的問題 –

回答

2

在CSV文件中,當,出現在字段中時,該字段需要用雙引號括起來。如果一個字段包含雙引號,則雙引號應加倍。

所以,你需要創建領域是這樣的:

IEnumerable<string> fields = row.ItemArray 
     .Select(field => field.ToString().Contains(",") || field.ToString().Contains("\"") 
      ? String.Format("\"{0}\"", field.ToString().Replace("\"", "\"\"")) 
      : field.ToString()); 
0

如問我會建議使用第二或由Chrisi對你的問題的意見中提供的選項第三,但,要回答這個問題,你」 D使用第一個選項,如下所示:

IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().Replace(",", myReplacementString); 

替換字符串可能是string.Empty,一個HTML編碼值或什麼的。

相關問題