Autor Beitrag
Ebil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: So 03.08.08 19:05 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 03.08.08 19:09 
Versuch es doch mit einem FileStream

_________________
Markus Kinzler.
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 03.08.08 19:11 
Lade immer eine Zeile

_________________
Markus Kinzler.
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: So 03.08.08 22:04 
Habs nun mit textfile gemacht, gibt aber probleme

ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Di 05.08.08 02:09 
newDatei müssteste ja auch noch resetten/rewriten.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 05.08.08 20:14 
user profile iconJerk hat folgendes geschrieben:
newDatei müssteste ja auch noch resetten/rewriten.

tut er doch mit append