Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - tStringlist speicherplatz Problem
Ebil - So 03.08.08 19:05
Titel: tStringlist speicherplatz Problem
Hi leute :D
Ich lade eine 400mb textdatei in eine tstringlist, will dann jede zeile auslesen und ein paar zeilen löschen, und die datei neu speichern.
Das problem ist das mein Arbeitsspeicher zu klein ist (so die fehlermeldung jedenfalls), und es immer abgebrochen wird.
Der speicherplatz verbrauch der anwendung geht auf 1,6GB~ hoch.
Gibt es eine möglichkeit die anwendung zu zwingen das ganze in den Virtuellen arbeitsspeicher oder auf die festplatte(wobei es da ja eh schon liegt) zu schreiben?
Es ist egal wie lange das ganze dauert da es eigentlich einmalig ist.
Gruß
Ebil
mkinzler - So 03.08.08 19:09
Versuch es doch mit einem FileStream
Ebil - So 03.08.08 19:11
Hab damit noch nie gearbeitet, wie genau stell ich das an?
Es darf ja auch nicht über eine zeile hinausgehen ...
mkinzler - So 03.08.08 19:11
Lade immer eine Zeile
Ebil - So 03.08.08 19:20
Das hilft mir nicht wirklich o.O
man kann auch mehr als ein satz schreiben, das weisst du schon? :P
mkinzler - So 03.08.08 19:23
Wenn man es in einem Satz schreiben kann, beschränke ich mich aus Faulheit darauf.
ReadLn() liesst immer eine Zeile inkl. Zeilenumbruch.
Ebil - So 03.08.08 19:56
Readln ist für dateien, und dateien <> stream.
Stream hat die eigenschaft read, aba damit komm ich nicht klar.
Gausi - So 03.08.08 20:24
Dann behandle das als Textfile. Ich selber habe damit relativ wenig Erfahrung, aber da gibt es sowas wie Readln. ;-)
Ebil - So 03.08.08 22:04
Habs nun mit textfile gemacht, gibt aber probleme
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| AssignFile(datei, 'C:\test.txt'); Reset(datei); AssignFile(newdatei, 'C:\test2.txt'); Append(newdatei); I := 0; while not EoF(datei) do begin Readln(datei); WriteLn(word); if (length(word) > 10) AND (length(word) < 30) then WriteLn(newdatei, word); end; |
Er überspringt einfach die while schleife o.O
//Edit Falls es wichtig ist, es ist eine konsolenanwendung o.O
Delete - Mo 04.08.08 00:12
wie sind denn die definitionen?
ausserdem solltest du prüfen ob die datei geöffnet werden kann und die leseoperationen gültig sind
Ebil - Mo 04.08.08 01:09
Das prog war nur für mich da brauch ich keine überprüfungen.
Bei Readln(datei); hab ich die Var vergessen.
Ebil
Delete - Mo 04.08.08 21:54
Unter 32-Bit bekommst du nicht mehr als 2GB. Nimm MemoryMappedFiles und lade immer nur den View, den du gerade bearbeiten willst.
Delete - Mo 04.08.08 21:57
wenn er mit readln arbeitet hat er nicht mehr, als bis zum zeilenende (mit pascal string max 255 byte). sonst hält er kaum was im speicher.
Delete - Mo 04.08.08 22:29
Ich bezog mich auf sein Ausgangsposting und seine verzweifelte Frage nach mehr Speicher.
Delete - Mo 04.08.08 22:39
schon gut lucky, wir wissen dass du der crack bist. denke jedoch, dass er einen konzeptfehler hat...
noch einen schönen abend
GG
Jerk - Di 05.08.08 02:09
newDatei müssteste ja auch noch resetten/rewriten.
Boldar - Di 05.08.08 20:14
Jerk hat folgendes geschrieben: |
| newDatei müssteste ja auch noch resetten/rewriten. |
tut er doch mit append
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!