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