2012-04-21 53 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