具有不同列顺序的F#csv提供程序

时间:2014-10-10 10:22:15

标签: csv f# type-providers f#-data

如果我定义了一个类型

type MyType = CsvProvider<"schema.csv",
    Schema="A->MyA=int, B->MyB=int">

如果我加载csv就好像

let csv1 = MyType.Load("file1.csv")

如果&#34; file1.csv&#34;包含&#34; schema.csv&#34;的所有列。有,但有不同的顺序,并有额外的列,没有出现在&#34; schema.csv&#34;。我是否仍然可以加载它,前提是我只对&#34; schema.csv&#34;中指定的列感兴趣?

2 个答案:

答案 0 :(得分:2)

你有一个锁定的CSV文件架构,并使用CsvProvider,或者你没有。

您始终可以选择&#34;还原&#34;到CsvFile(CsvParser):http://fsharp.github.io/FSharp.Data/library/CsvFile.html

使用后者,您可以轻松解析任何CSV文件,确认它包含您想要的列,然后根据需要阅读它们。

我通常会回复到CsvFile,因为经常创建CSV文件有点非结构化并且非常特别(至少在我遇到的情况下),然后CsvFile是一个很好的解决方案,具有更大的灵活性CsvProvider。是的还有更多的代码,但仍然......

答案 1 :(得分:1)

不支持该用例。如果列顺序不同,则不起作用。整个CsvProvider建立在您给出的数据与您提供的样本结构相同的假设之上。您始终可以在此处提交问题:https://github.com/fsharp/FSharp.Data/issues/