| Autor |
Beitrag |
Ebil
      
Beiträge: 131
|
Verfasst: So 03.08.08 19:05
Hi leute
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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 03.08.08 19:09
Versuch es doch mit einem FileStream
_________________ Markus Kinzler.
|
|
Ebil 
      
Beiträge: 131
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 03.08.08 19:11
Lade immer eine Zeile
_________________ Markus Kinzler.
|
|
Ebil 
      
Beiträge: 131
|
Verfasst: 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? 
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: 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.
_________________ Markus Kinzler.
|
|
Ebil 
      
Beiträge: 131
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
Ebil 
      
Beiträge: 131
|
Verfasst: 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
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 131
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.08.08 22:29
Ich bezog mich auf sein Ausgangsposting und seine verzweifelte Frage nach mehr Speicher.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Di 05.08.08 02:09
newDatei müssteste ja auch noch resetten/rewriten.
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Di 05.08.08 20:14
Jerk hat folgendes geschrieben: | | newDatei müssteste ja auch noch resetten/rewriten. |
tut er doch mit append
|
|