Library for reading csv file in F#

我怕爱的太早我们不能终老 提交于 2019-12-10 16:37:08

问题


F#

I am interested to read a csv file and output a List< List< string > >

let readCsv (filepath:string) : string list list =
//.......................

input file:
Quote1,Quote2,Quote3
"Hello,World","He said:""Yes""",Example

Output:
// Type: string list list
[["Quote1";"Quote2";"Quote3"];
 ["Hello,World"; "He said:"Yes"";"Example"]] 

Input2:
1,2,3,4,5,6
7,8,9,10,11,12

Output2:
// Type: string list list
[["1";"2";"3";"4";"5";"6"];
 ["7";"8";"9";"10";"11";"12"]]

However, some of the Nuget packages, e.g. CsvHelper, FileHelper, F#Data relies on defining a Class to "capture" the data, or defining a type by referring to a csv file.

https://joshclose.github.io/CsvHelper/

http://www.filehelpers.net/example/QuickStart/ReadWriteRecordByRecord/

http://fsharp.github.io/FSharp.Data/index.html

For example:

// In C#, from FileHelper Documentation
[DelimitedRecord(",")]
public class AbstractClass
{
    public string Quote1;
    public string Quote2;
    public string Quote3;
}

or

// F# Data Documentation
type AbstractType = CsvProvider<"../example.csv">

But the input file may change in number of columns (and so I cannot define an abstract class)

Of course, I can just write regular expression to break up the input file line-by-line, but I am interested to know if someone else has already done it (or is it a standard library function).

Thank you.


回答1:


If you use FSharp.Data there's a CsvFile class which can read arbitrary CSV files.

e.g.

let csv = CsvFile.Load(filename, hasHeaders = true)
csv.Rows
|> Seq.map (fun r -> (r.["Image"], float r.["Size"]))

Would create a sequence of tuples from the "Image" and "Size" columns.

csv.Headers is a string[] option which contains the headers from the first line of the file.

let csv = CsvFile.Load(filename, hasHeaders = false)
csv.Rows
|> Seq.map (fun r -> r.Columns |> List.ofArray)
|> List.ofSeq

might be what you're after



来源:https://stackoverflow.com/questions/45412423/library-for-reading-csv-file-in-f

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!