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中找不到任何东西
答案 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);
只是要清楚一点;您无法粘贴并继续上面的代码,必须对其进行编辑才能对上下文有效-遇到“您的”一词需要进行调整的任何地方。
我要概述的重要部分是您应该
答案 1 :(得分:0)
您可以使用类似的东西
cw.Configuration.ShouldQuote = (field, context) => context.HasHeaderBeenWritten;
或
cw.Configuration.ShouldQuote = (field, context) => context.Row > 1;
但是您需要根据需要进行测试和调整。