Ich frage mich, ob es eine einfache Möglichkeit gibt, Zeilen nacheinander aus einer Datei zu bekommen, ohne die gesamte Datei im Speicher zu laden. Ich würde gerne eine Falte über die Linien mit einem attoparsec Parser machen. Ich habe versucht mit Data.Text.Lazy.IO
mit hGetLine
und das bläst durch mein Gedächtnis. Ich lese später, dass schließlich die ganze Datei lädt.Lesen Sie große Zeilen in großer Datei ohne Puffer
Ich habe auch versucht Rohre Text mit folds
und view lines
mit:
s <- Pipes.sum $
folds (\i _ -> (i+1)) 0 id (view Text.lines (Text.fromHandle handle))
print s
nur zählt die Anzahl der Zeilen und es scheint etwas wackelig stuff „hGetChunk zu tun: ungültiges Argument (ungültige Bytefolge) "und es dauert 11 Minuten, wo wc -l
1 Minute dauert. Ich habe gehört, dass Pipes-Text könnte einige Probleme mit gigantischen Linien haben? (Jede Zeile ist über 1GB)
Ich bin wirklich offen für alle Vorschläge, kann nicht viel suchen außer für Anfänger readLine
how-tos finden.
Danke!
Sie verwenden Pipes.Text.IO für Eingabe anstelle von Pipes.Bytestring + Entschlüsselung, wie die Bibliothek rät. Die Fehlermeldung stammt aus der Textbibliothek, die für jeden Chunk eine Beurteilung über die Systemdecodierung vornimmt. Ich nehme an, es sagt, dass es den Brocken nicht verstehen kann, was auch immer er für die Kodierung hält. – Michael