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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...