Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在写入csv c时向字符串添加双引号#_C#_.net_Oop_Io_Csvhelper - Fatal编程技术网

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

C# 在写入csv c时向字符串添加双引号#,c#,.net,oop,io,csvhelper,C#,.net,Oop,Io,Csvhelper,我正在尝试将数据写入csv文件。我希望数据在记事本中打开时以双引号显示,但在csv中打开文件时不应显示任何双引号 下面是我正在使用的代码,但没有给出结果 csvFile.WriteField("\"" +data.FirstName == null ? string.Empty : data.FirstName + "\""); 有人能帮我解决这个问题吗?我将firstName赋值给一个稍后将要传递的变量,使代码更具可读性。我使用了一个字符串转义来为最终结果添加一个引号。现在可以将其传递给Wr

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

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

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

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

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

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


问题是你正试图反对CsvHelper的引用。根据规格

  • 包含换行符(CRLF)、双引号和逗号的字段 应该用双引号括起来。例如:
  • 如果使用双引号括起字段,则使用双引号 出现在字段中时,必须在其前面加上 另一个双引号。例如:
  • 因此,当您向字段添加双引号时,CsvHelper认识到整个字段需要用双引号括起来,并且添加的引号需要用另一个双引号转义。这就是为什么最后会有3个双引号

    CsvHelper有一个配置功能,您可以告诉它何时应该引用字段@JoshClose已经有了将所有字段用双引号括起来的答案。我会将其更新为CsvHelper的当前版本

    void Main()
    {
    var记录=新列表
    {
    新Foo{Id=1,Name=“one”},
    新Foo{Id=2,Name=“two”},
    };
    使用(var writer=new StringWriter())
    使用(var csv=new CsvWriter(writer,CultureInfo.InvariantCulture))
    {
    csv.Configuration.ShouldQuote=(字段、上下文)=>true;
    csv.书面记录(记录);
    writer.ToString().Dump();
    }
    }
    公开课Foo
    {
    公共int Id{get;set;}
    公共字符串名称{get;set;}
    }
    
    如果您仍然想自己添加双引号,可以关闭CsvHelper的双引号

    csv.Configuration.ShouldQuote=(字段,上下文)=>false;
    
    正在中断对版本20.0.0及更高版本的更改

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

    void Main()
    {
    var记录=新列表
    {
    新Foo{Id=1,Name=“one”},
    新Foo{Id=2,Name=“two”},
    };
    var config=新的CSV配置(CultureInfo.InvariantCulture)
    {
    ShouldQuote=(字段,上下文)=>true
    };
    使用(var writer=new StringWriter())
    使用(var csv=new CsvWriter(writer,config))
    {
    csv.书面记录(记录);
    writer.ToString().Dump();
    }
    }
    公开课Foo
    {
    公共int Id{get;set;}
    公共字符串名称{get;set;}
    }
    
    似乎有一个配置选项和一个覆盖
    WriteField
    以强制引用。使用其中一个。还有很多其他的答案(比如)谈论如何将引号转换成字符串。但我认为你的问题是如何使用三元运算符
    a?b:c
    。尝试在其周围添加括号,例如:
    “\”+(data.FirstName==null?string.Empty:data.FirstName)+“\”
    。操作顺序可能是检查
    “\”“+数据。Firstname==null
    ,但从来都不是这样,因为生成的字符串中至少有一个双引号。感谢您的响应。我尝试了您的解决方案,但仍然不起作用。我在记事本中得到的结果是“测试”,它有3个双引号,在csv文件中,它显示为名字的“test”,非常感谢。在我的案例中,以下行适用于我“csv.Configuration.ShouldQuote=(字段,上下文)=>true”;这给了我以下错误:
    属性或索引器“IWriterConfiguration.ShouldQuote”无法分配到--它是只读的
    版本20.0.0发生了重大更改。我添加了一个带有更改的更新。
    var firstName = data.FirstName == null ? string.Empty : data.FirstName;
    var firstNameWithQuoutes = $@"""{firstName}""";
    
           "aaa","b CRLF
           bb","ccc" CRLF
           zzz,yyy,xxx
    
           "aaa","b""bb","ccc"