如何在将Datatable转换为csv时删除行值中不需要的逗号?

时间:2016-01-28 07:26:17

标签: c# csv

Attached image represents sample datatable这是我将数据表转换为CSV的代码。在我的行中,值包含许多逗号。因此,使用逗号分隔符创建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());

2 个答案:

答案 0 :(得分:2)

在CSV文件中,当某个字段中出现,时,该字段需要用双引号括起来。如果某个字段包含双引号,则双引号应加倍。

所以你需要像这样创建你的字段:

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

答案 1 :(得分:0)

我建议使用Chrisi在您的问题评论中提供的第二或第三个选项,但是,为了回答问题,您可以使用第一个选项:

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

替换字符串可能是string.Empty,HTML编码值或其他任何内容。