gpt4 book ai didi

c# - CSV 解析包含双引号和逗号的字符串

转载 作者:太空狗 更新时间:2023-10-30 00:30:36 24 4
gpt4 key购买 nike

如果这个问题重复,我们深表歉意。

我正在尝试创建一个 CSV 文件,例如,包含标题、名称和评论列。 CSV 的每一行都有从数据库中读取到相关变量的每一列的值,然后将这些变量(用逗号分隔)添加到变量“换行符”,然后将其附加到 csv,如下所示:

    string title = reader[0]
string name = reader[1]
string comments = reader[2]
var csv = new StringBuilder();
var headerLine = "Title,Name,Comments"
csv.AppendLine(headerLine);

var newline = title + "," + name + "," + comments;
csv.AppendLine(newline);

最初我采用了上述方法,但很快遇到了一个问题,如果从数据库中读取的任何字段中包含逗号,该字段将在中间分开,例如如果 comments = "Comment, goes, here"将分布在输出 CSV 中的 3 列而不是 1 列。

为了尝试克服这个问题,我更改了我的代码,以便所有字段都用双引号引起来,这意味着字段中的逗号将不再拆分 CSV,如下所示:

    var newline = "\"" + title + "\",\"" + name + "\",\"" + comments + "\""

现在,有了这个,我遇到了一个问题,如果从数据库中读入的任何值包含双引号,这会搞乱一切,因为当数据库中的双引号显示为\"字段被转换成一个字符串,这是我已经使用的将每个字段的开头和结尾用双引号括起来以防止逗号拆分包含逗号的字段。

最佳答案

您需要转义双引号。你用什么来逃避它们取决于你打算用什么来阅读它们。转义序列可能应该是一个反斜杠后跟一个双引号,但如果使用 Excel,它将是两个连续的双引号。这可以使用 string.Replace 来完成。

var newline = "\"" + title.Replace("\"", "\"\"") + 
"\",\"" + name.Replace("\"", "\"\"") +
"\",\"" + comments.Replace("\"", "\"\"") + "\"";

或者使用string.Format

var newline = string.Format(
"\"{0}\",\"{1}\",\"{2}\"",
title.Replace("\"", "\"\""),
name.Replace("\"", "\"\""),
comments.Replace("\"", "\"\""));

关于c# - CSV 解析包含双引号和逗号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34721860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com