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

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

发布时间:2020-12-15 18:34:36 所属栏目:百科 来源:网络整理
导读:我有一个CSV格式的日志,我们写了一些日志记录操作.但是,其中一个字段允许用户输入,我需要确保如果他们在字段中输入我们解析它的逗号并将其替换为某些东西,例如,Excel将能够读取并在其中显示逗号放置(因此csv读者不会认为它是列的结尾). 目前我用#44替换逗号;
我有一个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))

(编辑:李大同)

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

    推荐文章
      热点阅读