F#CSV - 每行从列数据创建一个数组

时间:2018-05-26 10:44:15

标签: arrays csv f#

我有一个CSV文件,其中fst列是标题,接下来700列是一些int数据。

Title D1 D2 D3 D4 .. D700
Name1  0  1  7  5     48 

我尝试使用CsvProvider读取文件,然后将数据转换为我的自定义类型

type DigitRecord = { Title:string; Digits:int[] }

问题是我不知道如何将所有列数据(除了第一个带有标题的列除外)放入int []数组中。

 let dataRecords = 
    CSV.Rows 
    |> Seq.map (fun record -> {Title = record.Title; Digits = ???})

我想获得一个Title = Name1和Digits = [| 0,1,7,5 ... 48 |]

的记录

我是F#的新手,我很感激任何帮助!

1 个答案:

答案 0 :(得分:2)

我认为最简单的方法是使用CsvParser,如下所示:

let readData (path : string) seps =
    CsvFile.Load(path, seps).Rows
    |> Seq.map
        (fun row -> row.Columns.[0], row.Columns |> Array.skip 1 |> Array.map int)
    |> Seq.map
        (fun (title, digits) -> {Title = title; Digits = digits})