2

我正在寻找将 CSV 文件(浮点数)转换为浮点数列表的最简单方法。我不太熟悉在 Ocaml 中读取文件,所以我不确定这种功能需要什么。

任何帮助或方向表示赞赏:)

编辑:除非绝对必须,否则我宁愿不使用第三方 CSV 库。

4

2 回答 2

3

如果您不想包含第三方库,并且您的 CSV 文件格式简单,没有引号或嵌入的逗号,您可以使用标准库函数轻松解析它们。在循环或递归函数中使用read_line以依次读取每一行。要拆分每一行,请调用(使用或Str.split_delim链接您的程序)。调用以将每一列解析为浮点数。str.cmastr.cmxafloat_of_string

let comma = Str.regexp ","
let parse_line line = List.map float_of_string (Str.split_delim comma line)

请注意,如果您的字段包含引号,这将中断。在返回的列表的每个元素的开头和结尾去除引号是很容易的split_delim。但是,如果有嵌入的逗号,则需要适当的 CSV 解析器。如果您的数据是由法语语言环境中的本地化程序生成的,您可能已经嵌入了逗号——法语使用逗号作为小数分隔符(例如 English 3.14159、 French 3,14159)。用逗号而不是点来编写浮点数据不是一个好主意,但您可能会遇到这种情况(例如,某些电子表格 CSV 导出)。如果您的数据来自 Fortran 程序,则应该没问题。

于 2012-04-21T22:08:54.653 回答
3

https://forge.ocamlcore.org/projects/csv/

于 2012-04-21T17:51:53.047 回答