Быстрый анализ большого текстового файла utf-8 в haskell - PullRequest
4 голосов
/ 17 ноября 2011

У меня есть файл размером 300 МБ ( ссылка ) с символами utf-8. Я хочу написать программу на Haskell, эквивалентную:

cat bigfile.txt | grep "^en " | wc -l

Это работает в 2.6s в моей системе.

Прямо сейчас я читаю файл как обычную строку (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 Ответ

7 голосов
/ 17 ноября 2011

Пакет utf8-string обеспечивает поддержку чтения и записи строк UTF8. Он использует инфраструктуру ByteString, поэтому интерфейс, вероятно, будет очень похожим.

Другой проект Unicode Strings, который, вероятно, связан с вышеупомянутым и также вдохновлен ByteStrings, обсуждается в этой магистерской диссертации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...