首页 > 解决方案 > F# 如何写入/读取 CSV 文件

问题描述

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

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

Students.txt 文件的片段

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

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"

我需要了解如何编写这些函数。注意:这只是我的代码片段。

标签: csvf#

解决方案


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

如果这是一项作业,则可能需要您编写自己的解析器(在现实世界中这样做可能是个坏主意,因为现实世界的 CSV 文件可能非常混乱,但如果您的输入非常有规律,那就没问题了)。如果您要使用库,F# 数据库是 F# 社区中的大多数人会使用的。

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

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

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


推荐阅读