我有它的UTF-8字符的文件300MB(link)。我想寫一個相當於以下內容的haskell程序:快速分析大量的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的速度,但真實世界Haskell說它不支持utf-8。
'grep的-c 「^恩」 bigfile.txt'更快。結果,無效的字節序列錯誤表示該文件不是有效的utf-8,或者您的文件句柄未設置爲utf-8。如果你的ghc是最近的,它會默認讀取區域設置編碼的文件,檢查它。如果它不是utf-8,'hSetEncoding stdin utf8'應該修復它。 –