加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将DataTable导出为CSV时出现逗号问题

发布时间:2020-12-16 01:53:05 所属栏目:百科 来源:网络整理
导读:我已经采用了一些将DataTable转换为CSV文件的代码.它似乎运行良好,除了在实际数据中使用逗号.有没有办法在这种情况下显示逗号?这就是我所做的: StringBuilder sb = new StringBuilder();IEnumerablestring columnNames = dtResults.Columns .CastDataColum
我已经采用了一些将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());

解决方法

如果字段包含逗号,则应将其放在双引号(或单引号)中.

您可以使用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());

P.S:根据Wikipedia,没有真正的csv规范,但RFC 4180描述了经常使用的格式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读