我可以在不提供示例的情况下使用 CsvProvider 编写 headers 吗?
Can I write headers with the CsvProvider without providing a sample?
为什么我在 F# 中使用 CsvProvider<>
创建一个新的 CSV 类型,如下所示:
type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false>
然后 create/fill/save .csv,生成的文件不包含我指定的架构中的 headers?似乎应该有一种方法可以在最终的 .csv 文件中包含 headers,但事实并非如此。
设置HasHeaders = true
出错,因为没有提供示例。 HasHeaders = true
工作的唯一方法是有一个示例 .csv。在我看来,应该有一种方法可以在没有 样本的情况下指定架构 ,并在最终文件中包含 headers。
当我使用 [nameOfMyCSV].Save()
时,我是否遗漏了一些可以包含架构中的 headers 的东西,或者不能这样做?
恐怕 Schema
中的 headers 仅用于行的 属性 名称。要将它们保存在您保存的文件中,您必须提供 Sample
。但是,示例只能包含 headers。此外,HasHeaders
必须设置为 true
:
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A(decimal), B, C(decimal)",
HasHeaders = true>
如果示例仅包含 headers,那么如果您想指定数据类型,则还必须提供架构。
只有在 Schema
:
中重命名 Sample
headers 时,才能看到该架构用于 属性
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A->AA(decimal), B->BB, C(decimal)",
HasHeaders = true>
那么生成的行将具有 AA
、B
、CC
等属性。但是生成的文件还是会有A
、B
、C
。此外,您使用此模式创建的 csv 的 Headers
属性 将是 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 folder in general and CsvRuntime.fs。
为什么我在 F# 中使用 CsvProvider<>
创建一个新的 CSV 类型,如下所示:
type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false>
然后 create/fill/save .csv,生成的文件不包含我指定的架构中的 headers?似乎应该有一种方法可以在最终的 .csv 文件中包含 headers,但事实并非如此。
设置HasHeaders = true
出错,因为没有提供示例。 HasHeaders = true
工作的唯一方法是有一个示例 .csv。在我看来,应该有一种方法可以在没有 样本的情况下指定架构 ,并在最终文件中包含 headers。
当我使用 [nameOfMyCSV].Save()
时,我是否遗漏了一些可以包含架构中的 headers 的东西,或者不能这样做?
恐怕 Schema
中的 headers 仅用于行的 属性 名称。要将它们保存在您保存的文件中,您必须提供 Sample
。但是,示例只能包含 headers。此外,HasHeaders
必须设置为 true
:
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A(decimal), B, C(decimal)",
HasHeaders = true>
如果示例仅包含 headers,那么如果您想指定数据类型,则还必须提供架构。
只有在 Schema
:
Sample
headers 时,才能看到该架构用于 属性
type ThisCsv = CsvProvider<
Sample="A, B, C",
Schema = "A->AA(decimal), B->BB, C(decimal)",
HasHeaders = true>
那么生成的行将具有 AA
、B
、CC
等属性。但是生成的文件还是会有A
、B
、C
。此外,您使用此模式创建的 csv 的 Headers
属性 将是 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 folder in general and CsvRuntime.fs。