gpt4 book ai didi

f# - 我可以在不提供示例的情况下使用 CsvProvider 编写 header 吗?

转载 作者:行者123 更新时间:2023-12-04 13:37:17 26 4
gpt4 key购买 nike

为什么我用 CsvProvider<> 创建一个新的 CSV 类型在 F# 中是这样的:

type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false>

然后创建/填充/保存 .csv,生成的文件不包含我指定的架构中的标题?似乎应该有一种方法可以在最终的 .csv 文件中包含标题,但事实并非如此。

设置 HasHeaders = true错误,因为没有提供样本。 HasHeaders = true的唯一途径工作是有一个样本.csv。在我看来,应该有一种方法可以在没有样本的情况下指定架构,并且还可以在最终文件中包含标题。

我在使用 [nameOfMyCSV].Save() 时是否遗漏了什么?可以包含模式中的 header 还是不能这样做?

最佳答案

恐怕来自 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 folder一般和 CsvRuntime.fs特别是。

关于f# - 我可以在不提供示例的情况下使用 CsvProvider 编写 header 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com