gpt4 book ai didi

f# - 尝试加载示例文件时 CsvProvider 错误 "The given key was not present in the dictionary"的含义?

转载 作者:行者123 更新时间:2023-12-01 03:30:58 26 4
gpt4 key购买 nike

我无法使用 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

调试信息:
  • 如果我删除 FSharp.Data 库文件夹(v 2.3.0)并替换为 2.2.5 版本,它可以正常工作,没有错误。
  • 如果我不使用 FsLab.fsx 脚本而是使用
    #I "packages/FSharp.Data/lib/net40
    #r "FSharp.Data.dll"
    然后一切正常。
  • FsLab.fsx 脚本的路径是正确的,它在我将行发送到 fsi 时运行。
  • F# 版本是 14.0.23413.0。
  • FSlab下载的FSharp.Data版本为FSharp.Data.2.3.0。
  • 我在 .fsx 脚本中没有其他引用。
  • 我正在使用 Visual Studio 社区版 14.0.24720.00 更新 1。
  • .NET 版本 4.6.01038
  • 我现在意识到我没有收到弹出窗口,询问我是否要允许 .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.dllC:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers .

    由于直接引用 dll 有效,因此可能是版本不匹配问题。我的 FsLab 安装早于 VS2015 更新 1 和 2,因此将查看它在新下载时的行为是否有所不同。

    关于f# - 尝试加载示例文件时 CsvProvider 错误 "The given key was not present in the dictionary"的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37751219/

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