c# – 以CSV格式显示逗号而不使用逗号字符

前端之家收集整理的这篇文章主要介绍了c# – 以CSV格式显示逗号而不使用逗号字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个CSV格式的日志,我们写了一些日志记录操作.但是,其中一个字段允许用户输入,我需要确保如果他们在字段中输入我们解析它的逗号并将其替换为某些东西,例如,Excel将能够读取并在其中显示逗号放置(因此csv读者不会认为它是列的结尾).

目前我用&#44替换逗号;但这在Excel中显示文字字符串.

是否有标准方法在不使用实际逗号字符的情况下在CSV文件显示逗号?即使只适用于excel的解决方案也可以使用,因为我们的大多数客户都将使用Excel来查看此文件.

解决方法

处理嵌入式逗号的最佳方法是正确引用CSV文件

>应引用包含逗号的列
>包含引号的引用列应该对引用进行转义

例:

Joe Smith,“Joe Smith,Jr.”,“Joe “”The Man”” Smith,Jr.”

我写了一个扩展方法来帮助解决这个问题:

static public string CsvQuote(this string text)
{
    if (text == null) return string.Empty;

    bool containsQuote = false;
    bool containsComma = false;
    int len = text.Length;

    for (int i = 0; i < len && (containsComma == false || containsQuote == false); i++)
    {
        char ch = text[i];
        if (ch == '"')
        {
            containsQuote = true;
        }
        else if (ch == ',' || char.IsControl(ch))
        {
            containsComma = true;
        }
    }

    bool mustQuote = containsComma || containsQuote;

    if (containsQuote)
    {
        text = text.Replace("\"","\"\"");
    }

    // Quote the cell and replace embedded quotes with double-quote or just return as is
    return mustQuote ? "\"" + text + "\"" : text;
}

用法

logger.Write(myString.CsvQuote());

var csv = string.Join(",",listOfStrings.Select(CsvQuote))
原文链接:https://www.f2er.com/csharp/98944.html

猜你在找的C#相关文章