2016-12-30 4 views
3

Ich möchte eine große Datei Zeile für Zeile in Nim laden. Ich habe versucht, den folgenden Codeausschnitt:Wie Datei zeilenweise in Nim zu laden?

for line in lines "largefile.txt": 
    echo line 

Dies ist jedoch lädt die gesamte Datei largefile.txt in dem Speicher, die nicht möglich ist, wenn die Datei sehr groß ist> 30 GB.

Wie kann ich über eine große Datei iterieren, während nur eine einzige Zeile im Speicher gehalten wird?

+0

Ich bin nicht sicher, wie das passieren würde, es sei denn, Sie importieren einen Nicht-Standard-Zeilen-Iterator irgendwo. Der eine [in lib/system.nim] (https://github.com/nim-lang/Nim/blob/09b6d8c0ca5f9b5590e58d90b987975f36df8dd6/lib/system.nim#L3044) liest die Datei Zeile für Zeile, so wie Sie es wollen. Und wenn ich das mit einer großen Datei teste, bleibt die Speichernutzung wie erwartet konstant. –

Antwort

2

In der Tat hat Reimer Behrends Recht. Die lines Funktion funktioniert wie erwartet.

Das Problem war, dass meine Datei nur Newline-Zeichen entkommen war. Als Ergebnis liest Nim (korrekt) die Datei als eine große Zeile.