CSV类型提供程序在F#交互界面中找不到列

5

假设我有一个包含“人口”和“利润”两列的 CSV 文件,并希望在 F# 交互环境中使用它。我有以下代码:

#r "../packages/FSharp.Data.1.1.10/lib/net40/FSharp.Data.dll"

open FSharp.Data

// load csv header
let cities = new CsvProvider<"cities.csv">()

// how to reach data
let firstRow = cities.Data |> Seq.head
let firstPopulation = firstRow.Population
let firstProfit = firstRow.Profit

我从F#交互式中收到错误信息:

错误 FS0039: 字段、构造函数或成员'Population'未定义

这对我来说似乎很令人困惑,因为VS中的智能感知没有问题,可以通过CSV类型提供程序从我的数据中获取此列。

此外,我尝试使用相同的类型提供程序创建程序,一切都正常。就像这样:

open FSharp.Data

[<EntryPoint>]
let main argv = 
    use file = System.IO.File.CreateText("result.txt")
    let csv = new CsvProvider<"cities.csv">()
    for record in csv.Data do
        fprintfn file "%A" record.Population
    0

我有什么遗漏吗?谢谢任何回答。


3
你能尝试使用完整路径到CSV文件吗?(有时F#交互会对路径感到困惑...) - Tomas Petricek
很奇怪。你确定你已经将所有行发送到fsi了吗?我刚刚尝试了类似的东西,它可以工作。你使用的VS版本是什么? - Gustavo Guerra
2
如果您首先将列命名为xyzzy,尝试执行以锁定TP到FSI会话,然后将列重命名为Population并在同一FSI会话中再次尝试执行,则可能发生此情况。然后,VS(和Intellisense)中的TP实例将知道属性名称更改,但绑定FSI的实例不会。请尝试重置FSI会话并重复运行尝试。 - Gene Belitski
1
Tomas,我已经将路径更改为完整路径并且它开始工作了。同时Gene,你是正确的,一开始它是不同的列名。 - Martin Bodocky
@GustavoGuerra 我在VS中创建了CSV文件。 - Martin Bodocky
显示剩余4条评论
1个回答

0

试试这段代码

let Cities = new CsvProvider<"cities.csv">()
let cities = new Cities()
let firstRow = cities.Rows |> Seq.head

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接