1

在此处输入图像描述

我需要一个函数。当我输入 0~15 和保护时,它会返回 45%。就像 Excel 中的 Vlookup 函数一样。F#中是否有这样的功能?

(在网站上尝试 F#,Learn -> Financial Modeling -> Using the Yahoo Finance Type Provider 它建议我们使用 Samples.Csv.dll。但是,我没有安装它并且不想安装该软件包只是为了一个功能:(.. )


我按照教程(http://fsharp.github.io/FSharp.Data/library/CsvProvider.html)并尝试在我的计算机上运行该程序。但我现在有麻烦了

在此处输入图像描述

它无法识别 CsvProvider 的类型(所以我不能使用 Stocks.Load 函数。)

有什么问题..?

4

2 回答 2

4

这是在 F# Data 中使用CSV 类型提供程序时代码的外观。要使其正常工作,您需要添加对FSharp.Data.dll. 最好的方法是从 NuGet 安装包。在 Visual Studio 中,它会为您添加参考,在命令行中您可以说:

nuget install FSharp.Data

或者,如果您在 F# 脚本文件中,则需要安装 nuget 包,然后添加#r @"C:\path\to\FSharp.Data.dll". 然后您可以编写以下内容:

open FSharp.Data
// Generate type based on a local copy with sample data
type Data = CsvProvider<"sample.csv">
// Load actual data from a file (this can be a different file with the same structure)
let loaded = Data.Load("runtime/file/name.csv")

// Find row for a specified age range & look at the properties
let row = loaded.Data |> Seq.find (fun r -> r.Age = "0~15")
row.Protection
row.Saving
row.Specified
于 2013-10-08T16:22:58.687 回答
2

一个非常简单的方法是使用DataTable

open System.Data
open System.IO
open LumenWorks.Framework.IO.Csv

let vlookup =
  let table = new DataTable()
  do
    use streamReader = new StreamReader(@"C:\data.csv")
    use csvReader = new CsvReader(streamReader, hasHeaders=true)
    table.Load(csvReader)
    table.PrimaryKey <- [|table.Columns.["Age"]|]
  fun age (column: string) -> table.Rows.Find([|age|]).[column]

//Usage
vlookup "0~15" "Protection" |> printfn "%A"

那里不乏 CSV 阅读器。我使用了这个特别快的(也可以在 NuGet 上使用)。

于 2013-10-08T14:36:02.037 回答