CSV type provider from FSharp.Data 主要用于读取 CSV(顾名思义),但它也能够写入 CSV。
您需要做的就是定义类型,方法是提供一个示例 .CSV 文件
let titanic2 = CsvProvider<"../data/Titanic.csv", Schema="Fare=float,PClass->Passenger Class">.GetSample()
或者直接定义模式
type MyCsvType = CsvProvider<Schema = "A (int), B (string), C (date option)", HasHeaders=false>
然后您可以创建一个记录对象并填充它(以类型安全的方式!)
// you can build the rows themselves
let myCsv = new MyCsvType( [ MyCsvType.Row(1, "a", None)
MyCsvType.Row(2, "B", Some DateTime.Now) ])
// or, for your scenario, you probably want to define a conversion function
// from your record type to the CSV provider's type
let buildRowFromObject obj = MyCsvType.Row(obj.A, obj.B, obj.C)
let buildTableFromObjects = (Seq.map buildRowFromObject) >> Seq.toList >> MyCsvType
let myCsv = someSequenceOfObjects |> buildTableFromObjects
最后,只需调用
myCsv.SaveToString()
获取 CSV 格式的输出。