Große Textdatei handeln
-
Hallo,
ich habe eine große Textdatei (um die 20gb) bei der in jeder Zeile ein Wert steht. Ich lese diese Werte Zeile für Zeile aus und verarbeite diese weiter. Bei dieser riesigen Datei schafft es der Rechner allerdings nicht die ganze Datei in einer Sitzung zu bearbeiten, sodass ich immer wieder von vorne anfangen muss...
Gibt es eine Möglichkeit, die bereits abgearbeiteten Werte aus der Datei zu löschen, ohne die ganze Datei neu zu schreiben? Oder hat jemand eine andere Idee wie man das ganze lösen kann, sodass ich die Datei nicht immer wieder von vorne bearbeiten muss, sondern einfach beim letzten Wert fortfahren kann.
-
wieso ist die datei so groß?
mach doch mehrere kleinere daraus.
dann gibts da noch ne betriebssystem-abhängige funktion für das ändern der dateigröße, komme grade nicht drauf wie die heißt, hab meine lib-doku hier nicht zur hand.
-
du musst doch das was du von der datei schon verarbeitet hast nicht im speicher halten.
datei öffnen.
zeile in puffer einlesen, verarbeiten.
nächste Zeile in den selben puffer lesen.
-
@vlad_tepesch: da hast du mich komplett falsch verstanden... bei 20gb alles im speicher zu behalten waere auch sehr fragwuerdig.
mein problem ist, dass wenn ich das programm abbreche, ich immer wieder von neuem starten muss...
@werwiewas: ich werde mal probieren die datei aufzuteilen, wenn es nicht ebenfalls so lange dauert...
-
mein problem ist, dass wenn ich das programm abbreche, ich immer wieder von neuem starten muss...
dann speicher doch in einer seperaten datei (oder registry) die dateiposition an der du zuletzt warst und mach beim nächsten start weiter.
falls du die standard c dateifunktionen benutzt:
ftell zum auslesen des filepointers
fseek zum setzenEdit:
allerdings weiß ich nicht wie mann 20GB dateien überhaupt mit c verarbeiten kann, da die funktionen einen long als pointer benutzen
-> 2GB maxWahrscheinlich musst du hier die api funktionen benutzen
falls du windows benutzt:CreateFile
SetFilePointer (kann auch zum auslkesen des aktuellen benutzt werden)
closeHandle