FSharp.Data的CSV类型提供程序主要用于读取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 格式获取输出。
.SaveToString()
方法返回一个字符串,将其保存到何处取决于调用方。要保存到本地磁盘,请使用.Save()
函数,它需要一个带有路径的字符串、一个 TextWriter 或一个 Stream 参数,其中将写入内容。请参见: https://github.com/fsharp/FSharp.Data/blob/545c0eb89547e7ad29657bd18ec7a4df3b78c292/src/Csv/CsvRuntime.fs#L315请注意,内部Save
和SaveAsString
使用默认设置创建StringWriter
/StreamWriter
,因此使用平台默认换行符。 - kódfodrász