FSharp.Data 从 Csv 文件中提取列的子集并写入新文件

FSharp.Data extract a subset of columns from a CsvFile and write to new file

在 F# 中(FSharp.Data 的概率),如何从 CsvFile 中提取列的子集?

例如,假设我有一个csv文件file1.csv:

a, b, c, d
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

并且想要读取,只保留列 ab,然后将它们写入新的 csv 文件。我希望使用 Map:

之类的东西
let originalCsvFile = CsvFile.Load("file1.csv")
let subset = originalCsvFile.Map(fun row -> <get columns a and b>) ... write to file("file2.csv")

但不知道fun我应该使用什么,也不知道如何写一个新文件。

我可以从类型中看出 fun 应该 return 和 CsvRow 但我无法比这更进一步。

CsvProvider 支持 'inline' 架构规范。拥有两种文件类型后,您可以将 file1 行映射到 file2 行,创建一个新的 File2 实例并将新行保存到文件中:

open FSharp.Data

type File1 = CsvProvider<"file1.csv">
type File2 = CsvProvider<"a,b", Schema = "int,int">

let rows =
    File1.Load("file1.csv").Rows
    |> Seq.map(fun r -> File2.Row(r.A, r.B))
let f2 = new File2(rows)
f2.Save("file2.csv")