2011-01-23 120 views
16

任何人都可以推薦一個方法來分析與選擇,CSV文件:Haskell功能齊全的CSV解析器?

  • 組單元/場分離器
  • 設置記錄的結束/行終止
  • 組引號字符領域
  • 支持UTF-8字符串
  • 寫入內存CSV結構迴文件中

我也嘗試文本的能力.CSV,但它非常簡單,缺乏大部分上述功能。 有一些更先進的CSV解析模塊或者我要「從零開始」寫即用Text.ParserCombinators?我不打算重新發明輪子。

保重。

回答

4

Hackage快速搜索發現Data.Spreadsheet,裏面確實有定製的報價和分離器。

+0

我認爲仍然缺乏良好的csv庫:`spreadsheet`使用String和`csv-bytestring`不允許指定分隔符 – 2011-01-24 09:27:51

6

這是一箇舊線程,但csv-conduitcassava都包含大部分(如果不是全部的話) - 不確定是否重寫該文件 - 您正在查找的功能。

3

有上hackage的Data.Csv module。如果你的發行版沒有提供它的軟件包,你可以通過cabal進行安裝,例如。

$ cabal install cassava 

它可以讀取和寫入(即解碼/編碼)來自/到CSV文件的記錄。

您可以設置字段分隔符是這樣的:

import Data.Csv 
import Data.Char -- ord 
import qualified Data.ByteString.Lazy.Char8 as B 

enc_opts = defaultEncodeOptions { 
    encDelimiter = fromIntegral $ ord '\t' 
} 

write_csv vector = do 
    B.putStr $ encodeWith enc_opts vector 

目前,Data.Csv不提供其他編碼/解碼方案。有一些用於處理標題行的函數變體。現在,行用CRLF終止,雙引號用於引用,並且假設文本編碼爲UTF8。值中的雙引號用反斜槓引用,並且在「不必要」時省略引號。

-1

木薯工作在內存和非常簡單的庫如

encode [("John" :: Text, 27), ("Jane", 28)] 
"John,27\r\nJane,28\r\n"