Допустим, у меня есть файл 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 # interactive:
ошибка FS0039: поле, конструктор или член "Население" не определено
Мне это кажется сбивающим с толку, потому что intellisense в 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
Я что-то упускаю? Спасибо за любой ответ.
xyzzy
, заблокировали TP для сеанса FSI попыткой выполнения, затем переименовали столбец вPopulation
и попытались выполнить снова в том же сеансе FSI. Тогда экземпляр TP в VS (и Intellisense) будет знать об изменении имени свойства, а связанный с FSI - нет. Попробуйте сбросить сеанс FSI и повторите попытку запуска. - person Gene Belitski   schedule 16.12.2013