我如何将 F# 中的记录写入 csv?最好为某个变量的每个实例设置一行。我的记录和最终输出是一张如下图所示的 map 。
type Family =
{ Month : int
Year : int
Income : float
Family : int
Dogs : int
Cats : int
}
let monthly =
timeMap
|> Seq.ofList
|> Seq.map(fun ((month,year), rows) ->
{ Month = month
Year = year
Income = rows.Inc
Family = familyMap.[(month,year)].Children
Dogs = familyMap.[(month,year)].Dogs
Cats = familyMap.[(month,year)].Cats
})
|> List.ofSeq
let map =
monthly
|> List.map (fun x -> (x.Year,x.Month),x)
|> Map.ofList
已编辑
这是我尝试过的方法,但我得到的错误是(A,B,C,D,E,F) are not defined
,建议我使用语法 new (type) args
。最后一个错误出现在 >> MyCsvType
type MyCsvType = CsvProvider<Schema = "A (int), B (int), C (float), D (int), E (int), F (int)", HasHeaders = false>
let myCsvBuildRow (x:Family) = MyCsvType.Row(x.A,x.B,x.C,x.D,x.E,x.F)
let myCsvBuildTable = (Seq.map myCsvBuildRow) >> Seq.toList >> MyCsvType
let myCsv = monthly|> myCsvBuildTable
myCsv.SaveToString()
最佳答案
除了 myCsvBuildRow
函数需要使用正确的名称访问 Family
类型的成员外,您的代码几乎已经完成。在您的版本中,您正在访问 A
、B
等名称,但这些是 CSV 文件中列的名称,而不是成员的名称F#记录。以下对我有用:
type MyCsvType = CsvProvider<Schema = "A (int), B (int), C (float), D (int), E (int), F (int)", HasHeaders = false>
let myCsvBuildRow (x:Family) =
MyCsvType.Row(x.Month,x.Year,x.Income,x.Family,x.Dogs,x.Cats)
let myCsvBuildTable data =
new MyCsvType(Seq.map myCsvBuildRow data)
let myCsv = family |> myCsvBuildTable
myCsv.SaveToString()
关于f# - 如何在 F# 中编写 csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111590/