F#如何写入/读取CSV文件

时间:2018-11-12 00:01:40

标签: csv f#

我正在使用F#进行作业,必须将特定学生及其信息添加到大的Student.txt文件中

Student.txt文件包含其姓,名,中间字母,电话号码,电子邮件及其gpa

A snippet of the Students.txt file

如果我尝试添加此信息,然后从文件中读取:

type Phone = 

type Email = 

type StudentInfo =
    { firstName : string;
      middleInitial : char option;
      lastName : string;
      phone : Phone;
      email : Email option;
      gpa : float }

let addPhone input = 

let addEmail input =

let readStudentsFromCSV filename = 

let students = readStudentsFromCSV "Students.txt"

我需要了解如何编写这些功能。 注意:这只是我的代码的一小段。

1 个答案:

答案 0 :(得分:2)

有很多选项。主要问题是您是否要编写自己的CSV解析,还是要使用现有的库。

如果这是一项任务,则可能需要您编写自己的解析器(这样做在现实世界中可能不是一个好主意,因为现实世界中的CSV文件可能非常混乱,但是如果您输入的内容可能很好非常常规)。如果要使用库,则F# Data library是F#社区中大多数人会使用的库。

  • F#Data带有一个名为CsvProvider的类型提供程序,该提供程序可以为您推断CSV文件中的行类型,因此您不必编写显式的类型定义。 (或者,您仍然可以这样做,但是可以使用简单的转换将数据加载到结构中。)

  • F#数据也具有CsvFile类型,它只进行解析,但随后将数据作为一系列行(它们本身是字符串值的数组)返回。如果您只需要一些东西来分割线,而又想完成其余的工作,这可能会很好。

  • 如果您想自己编写CSV解析,则可以使用File.ReadAllLines读取单个行,然后使用row.Split(',')使用{{1}将每一行转换为字符串数组}作为分隔符。这可能对您的文件有效-但如果文件中存在任何转义符,则它将中断(例如,只有三列!