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

Export to CSV - How to write values which contain commas? 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();
    }

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

您需要为要放置逗号的字符串添加引号

     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("\"", "\"\"")
     }

我非常倾向于创建一个扩展方法,将字符串转换为有效的 CSV 字段。

如果字段包含逗号或包含 double-quote,则必须将其括在 double-quote 中,并且任何 double-quote 都必须在字符串中重复。

扩展方法如下:

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));
}