#f#
#f#
Вопрос:
Я пробую пример из книги Исаака Абрахама «get programming with F #». В нем я просто импортирую csv-файл в F # script и пытаюсь выполнить простые операции.
#r "nuget: FSharp.Data"
open FSharp.Data
type Football = CsvProvider<"FootballResults.csv">
let data = Football.GetSample().Rows|> Seq.toArray
let work = data |> Seq.filter (fun i -> i.``Full Time Away Goals`` > i.``Half Time Away Goals``)
let print = work |> Seq.take 10 |> Seq.map (fun i -> i.``Half Time Home Goals``)
let print2 = print |> Seq.iter (fun i -> printfn "%i" i)
Я получаю сообщение об ошибке:
script.fsx(6,43): error FS0039: The type 'Row' does not define the field, constructor or member 'Full Time Away Goals'.
Я в значительной степени застрял здесь. Csv-файл находится здесь, и я вижу название полей в окне intellisense, но независимо от того, что я пытаюсь, я не могу выполнять какую-либо работу с полями.
Я использую VSCode с
Microsoft (R) F# Interactive version 11.0.0.0 for F# 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
Обновить:
Я использовал абсолютный путь, и это сработало; но я должен сказать, что у меня есть скрипт и csv-файл в одном каталоге.
Directory of C:studyfsharp_Studycsv
20.01.2021 15:20 <DIR> .
20.01.2021 15:20 <DIR> ..
20.01.2021 15:19 26 446 FootballResults.csv
21.01.2021 08:29 373 script.fsx
2 File(s) 26 819 bytes
2 Dir(s) 131 790 934 016 bytes free
Ответ №1:
Проблема в том, что F # не может найти «FootballResults.csv» во время выполнения, потому что он находится в каталоге, отличном от того, в котором выполняется скрипт. Самый простой способ решить эту проблему — указать полный путь к файлу .csv:
type Football = CsvProvider<"C:MyFullPathFootballResults.csv">
Комментарии:
1. Вы также можете использовать, например
__SOURCE_DIRECTORY__ "/FootballResults.csv"
, s.t. вам не нужны абсолютные пути в вашем исходном коде (упрощает копирование / совместное использование) 🙂2. Понятно. Однако я считаю, что F # interactive запускается во временном каталоге, а не в том, который содержит скрипт.