C# 使用CsvHelper将报价写入特定CSV字段

C# 使用CsvHelper将报价写入特定CSV字段,c#,csvhelper,C#,Csvhelper,编写CSV文件时,需要仅引用特定列。使用CsvHelper 6.1.0,是否有一些方法可以单独配置字段,特别是是否引用字段 场1、场2、场3、场4、场5、场6 “引用的”、“引用的”、“未引用的”、“未引用的”、“已引用的” “引用的”、“引用的”、“未引用的”、“未引用的”、“已引用的” 到目前为止,我只在配置对象中找到了quotealFields和quoteNodeFields。您可以使用 您可以从自动映射类开始,然后编辑要显示在引号中的字段。大概是这样的: public sealed cl

编写CSV文件时,需要仅引用特定列。使用CsvHelper 6.1.0,是否有一些方法可以单独配置字段,特别是是否引用字段

场1、场2、场3、场4、场5、场6 “引用的”、“引用的”、“未引用的”、“未引用的”、“已引用的” “引用的”、“引用的”、“未引用的”、“未引用的”、“已引用的”

到目前为止,我只在配置对象中找到了quotealFields和quoteNodeFields。

您可以使用

您可以从自动映射类开始,然后编辑要显示在引号中的字段。大概是这样的:

public sealed class MyClassMap : ClassMap<MyClass> {
    public MyClassMap() {
        AutoMap();
        Map(m => m.Field1).ConvertUsing(m => $"\"{m.Field1}\"");
        Map(m => m.Field2).ConvertUsing(m => $"\"{m.Field2}\"");
        Map(m => m.Field6).ConvertUsing(m => $"\"{m.Field6}\"");
    }
}
公共密封类MyClassMap:ClassMap{
公共MyClassMap(){
自动映射();
Map(m=>m.Field1).ConvertUsing(m=>$“\”{m.Field1}\”);
Map(m=>m.Field2).ConvertUsing(m=>$“\”{m.Field2}\”);
Map(m=>m.Field6).ConvertUsing(m=>$“\”{m.Field6}\”);
}
}
然后在编写文件时应用它,如下所示:

CsvWriter myWriter = new CsvWriter(stream);
myWriter.Configuration.RegisterClassMap<MyClassMap>();
CsvWriter myWriter=新的CsvWriter(流);
myWriter.Configuration.RegisterClassMap();

我不完全确定这是不是一种“正确”的方法,但是它看起来确实是最简单的。您可以实现一个插入引号的
TypeConverter
,但对于如此简单的东西来说,这似乎太多工作了…

我知道OP询问了6.1.0,但如果它对其他人有帮助,从版本12开始,有一个更好的解决方案:

var indexesToQuote = new[] { 0, 2 };
csv.Configuration.ShouldQuote = (field, context) => 
    indexesToQuote.Contains(context.Record.Count) && 
    context.HasHeaderBeenWritten;

为什么要使用CsvHelper编写一个非常简单的csv文件?最好使用StreamWriter类编写。您可以使用字符串outputline=string.Join(“,”新字符串[]{colA,colB,colC,colD})创建csv行;writer.Writeline(输出线)@jdweng正在做很多不需要展示的工作。只需要了解是否以及如何在每个字段的基础上配置报价。不知道是否可以使用CSVHelper。网络库方法非常简单。这个解决方案为我插入了太多的引号。要修复它,我必须
csv.Configuration.QuoteNoFields=true,但这会弄乱我的其他字符串字段:|