我正在使用FSharp.Data typeproviders。
我想制作一个具有参数的函数,该参数设置typeprovider's示例字符串或文件位置。
let SyncIt url sample converter storer =
async {
url
|> MakeRequestAsync
|> Async.RunSynchronously
|> JsonProvider< sample >.Parse
|> Seq.iter (converter >> storer)
}
Run Code Online (Sandbox Code Playgroud)
如果使用以下命令调用模块中的JsonProvider
[<Literal>]
let sample = """{"name":"Peter","age":9}"""
type provider = JsonProvider<sample>
Run Code Online (Sandbox Code Playgroud)
工作正常。为什么我不能通过它parameter?我知道它与在编译时清楚引用有关,但是除了声明每个引用之外,其他所有方法都无法解决providers explicitly。
我正在尝试使用FSharp.Data第三方库,但The type 'XmlProvider' is not defined在XmlProvider类上遇到了错误。
namespace KMyMoney
open FSharp.Data
module Read =
let xml = File.ReadAllText("KMyMoneySampleFile.xml")
type KMyMoneySource = XmlProvider<xml>
Run Code Online (Sandbox Code Playgroud)
我正在使用NuGet来获取库。库为'FSharp.Data 1.1.8'
当我键入FSharp.Data.有四个选项中给出:Csv,FreebaseOperators,Json,和RuntimeImplementation。
我想念什么吗?我对F#比较陌生。因此,对这个简单的问题感到抱歉。我看过GitHub,但没有看到任何有关此问题的信息。我正在F#中创建一个库。
我试图找到一个简单的示例或介绍CSV类型提供程序.所以我按照这个链接来帮助我开始.现在我有一个Visual Studio 2012学生版,虽然文档说F#3.0有CSV类型提供程序但我无法找到它.所以我试图为本地CSV文件使用类型提供程序.我看到的是提到的CSV TypeProvider根本不存在.由于给定的示例没有真正编译,我环顾四周并使用类似的东西来加载oData服务:
#r "FSharp.Data.TypeProviders"
///loading a stackoverflow odata type provider
type stackOverflow = Microsoft.FSharp.Data.TypeProviders.ODataService<"http://data.stackexchange.com/stackoverflow/atom">
Run Code Online (Sandbox Code Playgroud)
所以这与上面的示例页面中提到的有点不同.我无法看到csv类型提供程序.我使用Visual Studio IDE列出类型提供程序,并且未列出csv.我尝试使用nuget更新软件包,但这仍然存在.任何人都可以指出如何使用csv类型提供程序的正确文档,以及可以找到一个简单示例的正确更新链接?
我正在使用F#Data库中的JSON类型提供程序从API访问JSON文档.文档包含一个属性(让我们称之为'car'),有时候是一个对象数组,有时候是一个对象.这是:
'car': [
{ ... },
{ ... }
]
Run Code Online (Sandbox Code Playgroud)
或这个:
'car': { ... }
Run Code Online (Sandbox Code Playgroud)
{ ... }在两种情况下,对象具有相同的结构.
JSON类型提供程序指示属性的类型为:
JsonProvider<"../data/sample.json">.ArrayOrCar
Run Code Online (Sandbox Code Playgroud)
sample.json我的样本文件在哪里.
我的问题是:我怎样才能弄清楚属性是一个数组(以便我可以将它作为数组处理)还是单个对象(以便我可以将它作为一个对象处理)?
更新: 简化的示例JSON将如下所示:
{
"set": [
{
"car": [
{
"brand": "BMW"
},
{
"brand": "Audi"
}
]
},
{
"car": {
"brand": "Toyota"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
并且使用以下代码将指出类型doc.Set.[0].Car是JsonProvider<...>.ArrayOrCar:
type example = JsonProvider<"sample.json">
let doc = example.GetSample()
doc.Set.[0].Car
Run Code Online (Sandbox Code Playgroud) 我正在使用CsvTypeProvider将CSV文件中的数据映射到我自己的数据结构中.这非常有效,除了我必须每次都重复映射功能:
type GamesFile = CsvProvider<"./data/15.csv">
let games15 = GamesFile.Load("./data/15.csv").Rows |> Seq.map ( fun c -> { Division = c.Div; Date = c.Date; HomeScore = c.HomeScore; AwayScore = c.AwayScore })
let games16 = GamesFile.Load("./data/16.csv").Rows |> Seq.map ( fun c -> { Division = c.Div; Date = c.Date; HomeScore = c.HomeScore; AwayScore = c.AwayScore })
Run Code Online (Sandbox Code Playgroud)
当我尝试将它移动到一个函数时,我被告知"基于此程序点之前的信息查找不确定类型的对象.在此程序点之前可能需要类型注释来约束对象的类型.这可能允许解析查找."
这是有道理的,但是如何从CSV的内容推断类型时,如何告诉映射函数它是什么类型?这通常如何解决?
我正在尝试从启用了 Windows 身份验证的 IIS 托管的页面中获取一些 html。
到目前为止,我有:
open FSharp.Data
[<EntryPoint>]
let main argv =
let html = Http.RequestString ("http://mywebsite.com/Detail.aspx", query=[("zip","9000");("date","11/01/2017")], headers=[???])
printf "%s" html
System.Console.ReadLine() |> ignore
0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud)
我需要在标题列表中添加什么?
假设有一个这样的提供者:
type ColorProvider = JsonProvider<"""
{
"id": "b35b5bcf-761a-4e50-9ff0-4c7de7dd0e5d",
"color": "Red"
}
""">
Run Code Online (Sandbox Code Playgroud)
如果这些对象之一根本没有 color 属性,则尝试从集合中打印颜色将失败:
dataAccess.QueryAsEnumerable<string>("SELECT Data FROM Objects")
|> Seq.map ColorProvider.Parse
|> Seq.iter (fun item -> printfn "%A" item.Color)
Run Code Online (Sandbox Code Playgroud)
有一个 JsonValue.Null 可以比较,但在这种情况下它不是空的,只是缺少该属性。
如何过滤掉没有颜色属性的项目?
强力球模式和分隔符不一致,这使得它成为一个不寻常的文件.(http://www.powerball.com/powerball/winnums-text.txt)
样品:
Draw Date WB1 WB2 WB3 WB4 WB5 PB PP
09/24/2016 15 07 29 41 20 22 2
09/21/2016 63 67 01 69 28 17 4
09/17/2016 51 19 09 62 55 14 4
有什么建议?
Chart.Line [ for x in 1.0 .. 100.0 -> (x, x ** 2.0) ]
Run Code Online (Sandbox Code Playgroud)
我多次尝试将Fsharp的图表视为F#Charting
我安装了一些我认为需要的扩展:
但对我来说,这似乎还不够.你能给我一些有用的指导吗?非常感谢你 .
以下脚本改变了不可变变量 jar,没有错误或警告。这是一个错误吗?还是我的理解有问题?
请解释为什么我不需要使用 mutable 关键字。
旁白:FSharp.Data.Http.RequestString 的 cookieContainer 参数在定义中未标记为可变:https://github.com/fsprojects/FSharp.Data/blob/134a08cda3acb8e746bb25d03692d90ee5caabab/src/Net/Http.fs
#r "System.Xml.Linq.dll";;
#r "nuget:FSharp.Data";;
open FSharp.Data
let url="http://www.google.com"
let uri=System.Uri(url)
// no mutable keyword here
let jar=System.Net.CookieContainer()
// Count is 0
printf $"Pre-request cookie count is: {jar.GetCookies(uri).Count}\n"
let r = Http.RequestString(url, cookieContainer=jar)
// Count is 1
printf $"Post-request cookie count is: {jar.GetCookies(uri).Count}\n"
Run Code Online (Sandbox Code Playgroud)
#r "System.Xml.Linq.dll";; #r "nuget:FSharp.Data";;