在除第一行(标题行)以外的所有字段周围写引号

时间:2018-11-24 17:32:27

标签: c# csvhelper

CsvHelper拥有一个非常方便的标志,可以在所有字段中设置let sumTransactions (transactions: Transaction list) = transactions |> Seq.groupBy(fun ts -> (ts.Creditor, ts.Debitor)) |> Seq.map (fun ((cred, deb), ts) -> let s = ts |> Seq.sumBy (fun t -> t.Spend) Transaction(deb, s , cred)) (在CSV文件中是常见要求):

""

但是,这也将csv.Configuration.QuoteAllFields = true; 置于第一行,其中包含字段名称。

如何"放在除包含字段名称的第一行以外的所有字段周围?

我在Google中找不到任何东西

2 个答案:

答案 0 :(得分:1)

读取csvhelper的代码后,似乎WriteHeader方法在内部使用WriteField,并设置一些标志,指示标头已被写入。 WriteField遵循当前配置的设置(是否应对字段加引号),并且将引号放入调用时传递的字段数据中,即使此时不一定要写入文件

因此,我建议您执行以下操作:

var cw = new CsvWriter(yourTextWriterOrWhatever);
cw.Configuration.QuoteNoFields = true;
cw.WriteHeader<YourClassNameHere>();
cw.NextRecord(); // without this first row is on same line as header
cw.Configuration.QuoteAllFields = true; //or set QuoteNoFields = false
cw.WriteRecords(yourCollectionOfYourClass);

只是要清楚一点;您无法粘贴并继续上面的代码,必须对其进行编辑才能对上下文有效-遇到“您的”一词需要进行调整的任何地方。

我要概述的重要部分是您应该

  • 在配置中关闭引号
  • 写标题,
  • 打开引用(通过引用所有内容或禁用quotenofields并让csvhelper确定是否引用)
  • 写数据记录

答案 1 :(得分:0)

您可以使用类似的东西

cw.Configuration.ShouldQuote = (field, context) => context.HasHeaderBeenWritten;

cw.Configuration.ShouldQuote = (field, context) => context.Row > 1;

但是您需要根据需要进行测试和调整。