为什么这样CsvProvider<>
在F#中创建新的CSV类型,如下所示:
type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false>
然后创建/填充/保存.csv,结果文件不包含我指定的架构中的标头?似乎应该有一种方法可以在最终的.csv文件中包含标头,但事实并非如此。
设置HasHeaders = true
错误了,因为没有提供样本。唯一的HasHeaders = true
工作方式是拥有一个示例.csv。在我看来,应该有一种无需示例就可以指定架构的方法,并且还可以在最终文件中包含标头。
我在使用时是否缺少某些内容[nameOfMyCSV].Save()
,可以包含架构中的标头,或者无法完成?
恐怕来自的标头Schema
仅用于该行的属性名称。要将它们保存在文件中,您必须提供Sample
。不过,样本只能包含标头。另外,HasHeaders
必须将其设置为true
:
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A(decimal), B, C(decimal)",
HasHeaders = true>
如果样本仅包含标题,那么如果要指定数据类型,则还必须提供架构。
您可以看到仅在重命名Sample
标头中时,该架构才用于属性Schema
:
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A->AA(decimal), B->BB, C(decimal)",
HasHeaders = true>
然后生成的行都会有样特性AA
,B
,CC
。但是生成的文件仍会有A
,B
,C
。同样,Headers
使用此架构创建的csv的属性将是Some [|"A"; "B"; "C"|]
:
// Run in F# Interactive
let myCsv = new ThisCsv([ThisCsv.Row(1.0m, "a", 2.0m)])
myCsv.Headers
// The last line returns: Some [|"A"; "B"; "C"|]
同时,为了更好地理解什么是解析器值得看一看在GitHub上的源代码里发生的事情:CSV文件夹一般和CsvRuntime.fs尤其如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句