任何人都可以推薦一個方法來分析與選擇,CSV文件:Haskell功能齊全的CSV解析器?
- 組單元/場分離器
- 設置記錄的結束/行終止
- 組引號字符領域
- 支持UTF-8字符串
- 寫入內存CSV結構迴文件中
我也嘗試文本的能力.CSV,但它非常簡單,缺乏大部分上述功能。 有一些更先進的CSV解析模塊或者我要「從零開始」寫即用Text.ParserCombinators?我不打算重新發明輪子。
保重。
任何人都可以推薦一個方法來分析與選擇,CSV文件:Haskell功能齊全的CSV解析器?
我也嘗試文本的能力.CSV,但它非常簡單,缺乏大部分上述功能。 有一些更先進的CSV解析模塊或者我要「從零開始」寫即用Text.ParserCombinators?我不打算重新發明輪子。
保重。
我不能推薦Haskell的隨時可打包的CSV解析器,但我記得Real-World Haskell by Bryan O'Sullivan et al.包含一章Parsec,作者通過創建CSV解析器來演示該章節。
相關chapter 16: Using Parsec可在網上;選中標題擴展示例部分:全CSV分析器。
上Hackage快速搜索發現Data.Spreadsheet,裏面確實有定製的報價和分離器。
這是一箇舊線程,但csv-conduit和cassava都包含大部分(如果不是全部的話) - 不確定是否重寫該文件 - 您正在查找的功能。
有上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。值中的雙引號用反斜槓引用,並且在「不必要」時省略引號。
木薯工作在內存和非常簡單的庫如
encode [("John" :: Text, 27), ("Jane", 28)]
"John,27\r\nJane,28\r\n"
我認爲仍然缺乏良好的csv庫:`spreadsheet`使用String和`csv-bytestring`不允許指定分隔符 – 2011-01-24 09:27:51