我采用了一些将DataTable转换为CSV文件的代码。它似乎运行良好,除了在实际数据中使用逗号。有没有办法在这种情况下显示逗号?这就是我所做的:
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dtResults.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dtResults.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText(saveFileDialog.FileName, sb.ToString());
答案 0 :(得分: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());
答案 1 :(得分: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());