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

F#如何写入/读取CSV文件,csv,f#,Csv,F#,我正在使用F#完成一项作业,我必须将一个特定的学生及其信息添加到一个大的Students.txt文件中 Student.txt文件包含他们的姓、名、中间名、电话号码、电子邮件和gpa 如果我试图添加此信息,然后从文件中读取: type Phone = type Email = type StudentInfo = { firstName : string; middleInitial : char option; lastName : string;

我正在使用F#完成一项作业,我必须将一个特定的学生及其信息添加到一个大的Students.txt文件中

Student.txt文件包含他们的姓、名、中间名、电话号码、电子邮件和gpa

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

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"
我需要了解如何编写这些函数。
注意:这只是我的代码片段。

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

如果这是一个赋值,那么可能需要您编写自己的解析器(在现实世界中这样做可能不是一个好主意,因为现实世界中的CSV文件可能非常混乱,但如果您的输入非常规则,则可能没有问题)。如果你要使用图书馆,大多数F#社区的人都会使用图书馆

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

  • F#Data还有
    CsvFile
    类型,它只进行解析,然后以行序列的形式返回数据(它们本身就是字符串值的数组)。如果您只是需要一些东西来处理拆分行,但希望完成其余的工作,那么这可能会很好

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


考虑到这是一个家庭作业……请看一下!它们非常漂亮,正是您所需要的。以下是答案。