2012-04-21 59 views
2

我正在寻找最简单的方法来将浮动列表中的CSV文件(浮动)。我不熟悉在Ocaml中通常阅读文件,所以我不确定这种功能需要什么。Ocaml CSV浮动列表

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

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

回答

3
+1

那么,你有没有在Google上输入“Ocaml CSV”? – 2012-04-21 17:52:22

+1

是的,实际上我希望不使用第三方库来解决这个问题。因为我只需要这一个功能,所以我不认为在我的项目中包含其他人的图书馆是值得的。 – user1181523 2012-04-21 20:35:55

+1

然后你应该看看第三方库来了解它是如何完成的。 – 2012-04-22 09:55:32

2

如果你不想包括third-party library,并且您的CSV文件格式根本不带引号或嵌入的逗号,你可以轻松地与标准库函数解析。在循环或递归函数中使用read_line依次读取每行。要拆分每一行,请拨打Str.split_delim(将程序与str.cmastr.cmxa关联)。请致电float_of_string将每列解析为一个浮点数。

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

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

+2

只要有一个包含逗号或引用字段的字段,就会中断。 – 2012-04-22 09:56:01

+0

我看过太多的csv阅读代码,认为没有引号等,但从来没有持续很长时间。 – ygrek 2012-04-23 07:26:22