代码之家  ›  专栏  ›  技术社区  ›  Ayto Maximo

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

  •  5
  • Ayto Maximo  · 技术社区  · 6 年前

    我有一个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 回复  |  直到 6 年前
        1
  •  2
  •   FoggyFinder    6 年前

    我认为最简单的方法就是使用 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})