我正在使用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"
我需要了解如何编写这些功能。 注意:这只是我的代码的一小段。
答案 0 :(得分:2)
有很多选项。主要问题是您是否要编写自己的CSV解析,还是要使用现有的库。
如果这是一项任务,则可能需要您编写自己的解析器(这样做在现实世界中可能不是一个好主意,因为现实世界中的CSV文件可能非常混乱,但是如果您输入的内容可能很好非常常规)。如果要使用库,则F# Data library是F#社区中大多数人会使用的库。
F#Data带有一个名为CsvProvider
的类型提供程序,该提供程序可以为您推断CSV文件中的行类型,因此您不必编写显式的类型定义。 (或者,您仍然可以这样做,但是可以使用简单的转换将数据加载到结构中。)
F#数据也具有CsvFile
类型,它只进行解析,但随后将数据作为一系列行(它们本身是字符串值的数组)返回。如果您只需要一些东西来分割线,而又想完成其余的工作,这可能会很好。
如果您想自己编写CSV解析,则可以使用File.ReadAllLines
读取单个行,然后使用row.Split(',')
使用{{1}将每一行转换为字符串数组}作为分隔符。这可能对您的文件有效-但如果文件中存在任何转义符,则它将中断(例如,
只有三列!