2014-10-10 77 views
1

如果我定義了一個類型f讓不同的列順序

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

如果我加載CSV的喜歡

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

如果 「file1.csv」 包含了所有的列,「schema.csv#CSV提供商「有,但順序不同,並且有額外的列沒有出現在」schema.csv「中。如果我只對「schema.csv」中指定的列感興趣,我還可以加載它嗎?

+0

我不知道。如果你嘗試會發生什麼? – 2014-10-10 11:06:38

+0

模式不匹配或加載奇怪的數據。我不知道我做錯了,還是csv提供者根本不支持這個用例。 – colinfang 2014-10-10 11:25:33

回答

1

該用例不受支持。如果列順序不同,則不起作用。整個CsvProvider建立在假設您提供的數據與您提供的樣本結構相同的基礎上。你總是可以在這裏提交一個問題:https://github.com/fsharp/FSharp.Data/issues/

2

要麼你有一個鎖定的CSV文件模式,並使用CsvProvider,或者你沒有。

你總是有「恢復」到CsvFile(CsvParser)的選項:http://fsharp.github.io/FSharp.Data/library/CsvFile.html

對於後者,你可以很容易地解析任何CSV文件,確認它有你想要的列,然後讀取它們作爲通緝。

我通常會回覆到CsvFile,因爲經常創建的CSV文件在某種程度上是非結構化的並且顯得特別(至少在我遇到過的情況下),然後CsvFile是一個很好的解決方案,在CsvProvider中。是更多的代碼,但仍然...