最終的にファイル全体をメモリにロードせずに、一度に1行ずつファイルを取得する簡単な方法があるのだろうかと思いました。私はattoparsecパーサで回線を折りたたみたいと思います。私はhGetLine
とData.Text.Lazy.IO
を使ってみました。それは私の記憶を吹き飛ばします。私は後で読むと、最終的にファイル全体が読み込まれます。大きなファイルの大きな行をバッファリングせずに読み取る
s <- Pipes.sum $
folds (\i _ -> (i+1)) 0 id (view Text.lines (Text.fromHandle handle))
print s
だけで行数をカウントし、それはいくつかのグラグラもの「hGetChunkやっているように見えるために:無効な引数を(無効なバイトシーケンスを
私もfolds
とview lines
でパイプ-テキストを使用してみました)」と表示され、wc -l
が1分かかるところで11分かかります。 パイプのテキストには巨大な線に問題があると聞きましたか? (各行は約1GBです)
私は本当に提案には開放されており、初心者以外の多くの検索を見つけることができませんreadLine
ハウツー。
ありがとうございます!
ライブラリのアドバイスとして、Pipes.Bytestring + decodingではなく入力用にPipes.Text.IOを使用しています。エラーメッセージは、各チャンクのシステム解読を判断しているテキストライブラリからのメッセージです。私はそれが、エンコーディングが何であると思ってもチャンクを理解することができないと言っていると仮定します。 – Michael