我有一个CSV格式的日志,我们写了一些日志记录操作.但是,其中一个字段允许用户输入,我需要确保如果他们在字段中输入我们解析它的逗号并将其替换为某些东西,例如,Excel将能够读取并在其中显示逗号放置(因此csv读者不会认为它是列的结尾).
目前我用,替换逗号;但这在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))