快速解析haskell中的大型utf-8文本文件

时间:2011-11-17 19:12:59

标签: parsing haskell utf-8

我有一个300MB的文件(link),里面有utf-8字符。我想写一个等同于:

的haskell程序
cat bigfile.txt | grep "^en " | wc -l

在我的系统上运行2.6秒。

现在,我正在将该文件作为普通字符串(readFile)读取,并且具有以下内容:

main = do
    contents <- readFile "bigfile.txt"
    putStrLn $ show $ length $ lines contents

几秒钟后,我收到此错误:

Dictionary.hs: bigfile.txt: hGetContents: invalid argument (Illegal byte sequence)

我认为我需要使用更符合utf-8的东西吗?如何快速兼容utf-8?我读到Data.ByteString.Lazy的速度,但Real World Haskell说它不支持utf-8。

1 个答案:

答案 0 :(得分:7)

utf8-string支持读写UTF8字符串。它重用了ByteString基础设施,因此界面可能非常相似。

this Masters thesis中讨论了另一个可能与上述相关的Unicode字符串项目,也受ByteStrings的启发。