微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导出为CSV-如何编写包含逗号的值? C#

如何解决导出为CSV-如何编写包含逗号的值? C#

我目前有一个用于导出到csv文件的字符串生成器。 CSV文件中正在导出的值在somw值中包含逗号。

有时数据包含一个“,”导致其生成不正确。

public string ExportActionMapAsCsv()
    {
        StringBuilder builder = new StringBuilder(",");
        List<EggEmbryoActivity> actions = GetActions();
        List<EggStatusActionMap> actionMaps = GetActionMaps();

        builder.AppendLine(string.Join(",",actions.Select(x => x.Title)));

        foreach (EggStatusActionMap actionMap in actionMaps)
        {
            builder.Append(actionMap.StatusDescription);
            builder.Append(",");
            builder.AppendLine(string.Join(",actionMap.ActionMaskAsBinary.PadLeft(actions.Count,'0').tochararray()));
        }

        return builder.ToString();
    }

这将生成导出,但是如何在单列中显示逗号数据

解决方法

我很想创建一个扩展方法,将字符串转换为有效的CSV字段。

如果字段包含逗号或包含双引号,则必须将其用双引号引起来,并且任何双引号都必须在字符串中重复。

这是扩展方法:

public static class Ex
{
    public static string ToCsvSafeField(this string field) =>
        (field.Contains(',') || field.Contains('"'))
            ? $"\"{field.Replace("\"","\"\"")}\""
            : field;
}

然后,我将像这样重写代码:

foreach (EggStatusActionMap actionMap in actionMaps)
{
    var items =
        actionMap
            .ActionMaskAsBinary
            .PadLeft(actions.Count,'0')
            .ToCharArray()
            .Select(x => x.ToString().ToCsvSafeField())
            .StartWith(actionMap.StatusDescription.ToCsvSafeField());
            
    builder.AppendLine(string.Join(",",items));
}
,

您需要在要加逗号的字符串中加上引号

     foreach (EggStatusActionMap actionMap in actionMaps)
     {
         builder.Append("\"" + neutralizeInput(actionMap.StatusDescription) + "\"");
         builder.Append(",");
         builder.AppendLine("\"" + neutralizeInput(string.Join(",actionMap.ActionMaskAsBinary.PadLeft(actions.Count,'0').ToCharArray())) + "\"");
     }

     private string neutralizeInput(string input){
         return input.replace("\"","\"\"")
     }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。