在写入csv c#时向字符串添加双引号

     2023-02-25     236

关键词:

【中文标题】在写入csv c#时向字符串添加双引号【英文标题】:Adding double quotes to string while writing to csv c# 【发布时间】:2020-10-09 02:59:06 【问题描述】:

我正在尝试将数据写入 csv 文件。我希望数据在记事本中打开时以双引号显示,但在 csv 中打开文件时不应显示任何双引号。

以下是我正在使用的代码,但它没有给出结果。

csvFile.WriteField("\"" +data.FirstName == null ? string.Empty : data.FirstName + "\"");

有人可以帮我解决这个问题吗?

【问题讨论】:

看起来有一个配置选项和 WriteField 的覆盖以强制引用。使用其中之一。 还有很多其他答案(如this one)谈论如何将引号转换为字符串。但我认为你的问题是你如何使用三元运算符a ? b : c。尝试在其周围添加括号,例如:"\"" + (data.FirstName == null ? string.Empty : data.FirstName) + "\""。操作顺序可能会检查是否"\"" + data.Firstname == null,它从来都不是,因为结果字符串总是至少有一个双引号。 【参考方案1】:

问题是你试图对抗 CsvHelper 的引用。根据RFC 4180 规范。

    包含换行符 (CRLF)、双引号和逗号的字段 应该用双引号括起来。例如:
       "aaa","b CRLF
       bb","ccc" CRLF
       zzz,yyy,xxx
    如果使用双引号将字段括起来,则使用双引号 出现在字段内必须通过在它前面加上 另一个双引号。例如:
       "aaa","b""bb","ccc"

所以当你在字段中添加双引号时,CsvHelper 会识别出整个字段需要用双引号括起来,并且添加的引号需要用另一个双引号进行转义。这就是为什么你最终会使用 3 个双引号。

CsvHelper 有一个配置函数,你可以告诉它何时应该引用一个字段。 @JoshClose 已经有一个答案 here 用于将所有字段括在双引号中。我会为当前版本的 CsvHelper 更新它。

void Main()

    var records = new List<Foo>
    
        new Foo  Id = 1, Name = "one" ,
        new Foo  Id = 2, Name = "two" ,
    ;

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    
        csv.Configuration.ShouldQuote = (field, context) => true;
        csv.WriteRecords(records);

        writer.ToString().Dump();
    


public class Foo

    public int Id  get; set; 
    public string Name  get; set; 

如果您仍想自己添加双引号,可以关闭 CsvHelper 的双引号。

csv.Configuration.ShouldQuote = (field, context) => false;

20.0.0 及更高版本的重大更改

Changed CsvConfiguration to a read only record to eliminate threading issues.

您需要创建CsvConfiguration,在初始化时设置ShouldQuote,然后将其传递给CsvWriter

void Main()

    var records = new List<Foo>
    
        new Foo  Id = 1, Name = "one" ,
        new Foo  Id = 2, Name = "two" ,
    ;
    
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    
        ShouldQuote = (field, context) => true
    ;

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, config))
    
        csv.WriteRecords(records);

        writer.ToString().Dump();
    


public class Foo

    public int Id  get; set; 
    public string Name  get; set; 

【讨论】:

非常感谢。在我的情况下,以下行对我有用 "csv.Configuration.ShouldQuote = (field, context) => true;" 这给了我以下错误:Property or indexer 'IWriterConfiguration.ShouldQuote' cannot be assigned to -- it is read only 版本 20.0.0 发生了重大变化。我添加了有关更改的更新。【参考方案2】:

通过将 firstName 赋值给稍后将传递的变量,我使代码更具可读性。我使用字符串转义来为最终结果添加引号。现在您可以将它传递给您的 WriteField 方法。

有关字符串转义的更多信息,请参见:here 和 here。

var firstName = data.FirstName == null ? string.Empty : data.FirstName;
var firstNameWithQuoutes = $@"""firstName""";

【讨论】:

感谢您的回复。我尝试了您的解决方案,但仍然没有用。我在记事本中得到的结果是“”“test”“”,它有 3 个双引号,在 csv 文件中,它显示为名字的“test”

在c#中写入文件时如何用变量显示双引号? [复制]

...间】:2021-04-1114:39:12【问题描述】:我正在尝试使用C#将字符串写入文件,我正在寻找的输出应该是这样的<metaname="geo.region"content="Asia"/>为了实现这一点,我已经尝 查看详情

在字符串中添加双引号会给我不正确的数据,在python中(代码片段)

...加双引号,在文件输出中(我想要.tsv输出文件),我在字符串周围得到了四个双引号,当我将其写入时,它给了我正确的结果。csv文件格式。代码如下importreimportpandasaspddf=pd.read_csv('C:/Users/name/Documents/TA/sample.tsv',delimiter=' ',encoding... 查看详情

停止访问将两组双引号写入 csv

】停止访问将两组双引号写入csv【英文标题】:StopAccesswritingtwosetsofdoublequotestocsv【发布时间】:2016-10-1411:27:44【问题描述】:所以,我正在使用记录集的输出并将其写入csv文件。但是我遇到了引号问题。理想情况下,我想将它... 查看详情

将字符串写入 CSV 时转义逗号

】将字符串写入CSV时转义逗号【英文标题】:EscapecommaswhenwritingstringtoCSV【发布时间】:2019-04-0820:53:06【问题描述】:我需要使用Python在CSV文件中添加一个包含逗号的字符串。有人说将字符串括在双引号中会转义其中的逗号。这... 查看详情

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

】CSV解析包含双引号和逗号的字符串【英文标题】:CSVParsingStringscontainingdoublequotesandcommas【发布时间】:2016-04-1518:44:54【问题描述】:如果此问题重复,我们深表歉意。我正在尝试创建一个包含标题、名称和评论列的CSV文件。CSV... 查看详情

读取带有双引号和单引号变量的 CSV 文件

...在处理非常大的文件(例如1GB+)并希望从csv中读取一个字符串变量,该变量中可能有一个单引号或双引号。有没有办法在打开CSV时快速有效地执行此操作?或者是将quote_char变量用于一种类型的引号并在字符串中转义另一 查看详情

python处理完csv数据后重新写入新csv文件,为啥新文件用记事本打开没有双引号?该怎么解决?谢谢

...)os.rename(file_temp,file_old)因为这里面的引号是将不同单元格字符串分割用的,而那个英文逗号是分割字符串的,只在当前状态下 查看详情

双引号不会在循环中转义

...个csv文件(即test.csv),我必须仅在该文件中找到双引号字符串。这些双引号字符串需要在一个特定列(即第7列)中找到。以下是文件内容:Company,ProjectCode,Level1,NewLevel2,NewLevel3,TaskNumber,L 查看详情

从utf-8转换为iso-8859-15时会自动替换哪些双引号字符?(代码片段)

...V文件。问题是UTF-8似乎有双引号的几个字符,在将CSV文件写入光盘时会自动替换为字符"(=QuotationMarkU+0022)。我们发现的是:LeftDoubleQuotationMarkU+201CRightDoubleQuotationMarkU+201DDoubleLow-9QuotationMarkU+201EModifierLetterDoublePrimeU+02BACombiningDouble... 查看详情

如何在json单引号中写入c#字符串

】如何在json单引号中写入c#字符串【英文标题】:Howtowritec#stringinjsonsinglequotes【发布时间】:2018-06-0606:35:00【问题描述】:我正在用json-rpc编写一个程序,我想在json字符串中声明字符串变量,我在声明它时犯了错误,不知道什么... 查看详情

Spark数据框databricks csv附加额外的双引号

...AT并将dataframe作为csv文件存储在HDFS位置时,会在concat列中添加额外的双引号单独在输出文件中。当我应用显示时不会添加 查看详情

在 C# 中为字符串分配双引号的最易读的方法

】在C#中为字符串分配双引号的最易读的方法【英文标题】:MostreadablewaytoassignadoublequotetoastringinC#【发布时间】:2010-12-0314:44:41【问题描述】:有没有其他人认为在很短的字符串中转义字符会使它们不太可读?我注意到我在代码... 查看详情

转义字符串中的双引号

】转义字符串中的双引号【英文标题】:Escapedoublequotesinastring【发布时间】:2013-01-0623:48:20【问题描述】:双引号可以这样转义:stringtest=@"Hesaidtome,""HelloWorld"".Howareyou?";但这涉及在字符串中添加字符"。是否有C#函数或其他方... 查看详情

CSV 文件中的逗号和双引号

...我有一个带有逗号和双引号的csv文件。然而,双引号仅在字符串中有逗号时使用。像这样:AAA,BBB,"ACB,BCA",123,"1,987"DDC,CHA,ACH;HDC,"2,34",192我不想解析双引号中的逗号并希望得到以下输出:x1x2x3x4x5AAABBB 查看详情

在 hive 的一列中加载具有“(双引号)的管道分隔 CSV 数据

...如下:-Rollno|Name|height|department101|Aman|5"2|C.S.E将所有列作为字符串。当我在配置单元中加载上述数据时 查看详情

正则表达式将引号添加到不带引号的 CSV 列

】正则表达式将引号添加到不带引号的CSV列【英文标题】:RegularExpressiontoaddquotestoCSVcolumnswithoutquotes【发布时间】:2014-11-0903:25:28【问题描述】:我有CSV格式的数据,我无法更改格式。有些列有双引号,有些没有引号。唯一的问... 查看详情

如何在 C# 运行时向类添加属性?

】如何在C#运行时向类添加属性?【英文标题】:HowCanIaddpropertiestoaclassonruntimeinC#?【发布时间】:2013-01-2109:36:40【问题描述】:我有一堂课:classMyClass...MyClassc=newMyClass();是否可以在运行时向此类添加属性/字段?(我不知道它们... 查看详情

在 MySql 中,如何将 csv 文件中的 sql 字符串中的空值导出为双引号(“”)?

】在MySql中,如何将csv文件中的sql字符串中的空值导出为双引号(“”)?【英文标题】:InMySqlhowdoIexportnullvaluesfromansqlstringinacsvfileasdoublequotes("")?【发布时间】:2018-08-3006:19:27【问题描述】:我会尽量保持简短和重点。... 查看详情