我无法使用 fslab 提供的 FSharp.Data csv 提供程序加载 csv 文件,包括示例 adwords.csv 文件。
下面这个错误是什么意思?此外,当我将鼠标悬停在 Visual Studio 编辑器中的代码上时,它提到“字典中不存在给定的键”
问题示例:
#load "packages/FsLab/FsLab.fsx"
open System.IO
open FSharp.Data
"adwords.csv"
|> File.ReadAllLines
let test = CsvProvider<"adwords.csv">.GetSample()
输出:
>
val it : string [] =
[|"Criteria ID,Name,Canonical Name,Parent ID,Country Code,Target Type,Status";
"1000010,Abu Dhabi,"Abu Dhabi,Abu Dhabi,United Arab Emirates",9041082,AE,City,Active";
"1000011,Ajman,"Ajman,Ajman,United Arab Emirates",9047096,AE,City,Active";
"1000012,Al Ain,"Al Ain,Abu Dhabi,United Arab Emirates",9041082,AE,City,Active";
"1000013,Dubai,"Dubai,Dubai,United Arab Emirates",9041083,AE,City,Active";
"2004,Afghanistan,Afghanistan,,AF,Country,Active"|]
>
>System.MethodAccessException: Attempt by method '<StartupCode$FSI_0007>.$FSI_0007.main@()' to access method 'FSharp.Data.Runtime.CsvFile`1<System.__Canon>.Create(System.Func`3<System.Object,System.String[],System.__Canon>,
at <StartupCode$FSI_0007>.$FSI_0007.main@() in C:\test.fsx:line 11
Stopped due to error
我用自己的文件遇到了这个问题,所以我从这里抓取了这个示例文件:https://raw.githubusercontent.com/fsharp/FSharp.Data/master/tests/FSharp.Data.Tests/Data/Adwords.csv
调试信息:
#I "packages/FSharp.Data/lib/net40 #r "FSharp.Data.dll"
然后一切正常。 最佳答案
文件没有任何问题。例如,这有效:
#load @"..\..\FSLAB\packages\FsLab\FsLab.fsx"
open System.IO
open FSharp.Data
[<Literal>]
let csvFile = @"C:\tmp\adwords.csv"
File.Exists csvFile
type Csv = CsvProvider<csvFile>
let csv = Csv.Load(csvFile)
csv.Rows
您的 FSharp.Data 安装或类型提供程序安全性的 FsLab 有问题。试试下面的,直接指定文件的路径。如果它仍然不起作用,只需 nuget FSharp.Data 并尝试直接在新项目中使用 csv 类型提供程序。
其他信息也很有帮助。 VS 版本,FSLab 版本,还有其他引用资料。等等。
编辑: 感谢您提供调试信息。这实际上很有帮助。 VS2015 Update 1 破坏了两件事,Fsharp 的绑定(bind)重定向和类型提供程序(可能是 FSharp 工具,我忘了)。我会升级到更新 2。如果这不可能,请检查您的
FSharp.Data.TypeProviders.dll
是否在 C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
中。由于直接引用 dll 有效,因此可能是版本不匹配问题。我的 FsLab 安装早于 VS2015 Update 1 和 2,因此将查看它在新下载时的行为是否有所不同。
关于f# - 尝试加载示例文件时 CsvProvider 错误 "The given key was not present in the dictionary"的含义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37751219/