Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Textdatei auslesen - braucht zu viel Speicher? (https://www.delphipraxis.net/41519-textdatei-auslesen-braucht-zu-viel-speicher.html)

Zerolith 4. Mär 2005 14:34


Textdatei auslesen - braucht zu viel Speicher?
 
Hallo!

ich habe eine Normale Textdatei wo in jeder Zeile ein wort steht.
diese lese ich mit Assignfile usw aus.

dann habe ich ein:
Delphi-Quellcode:
TListe = array of String;
ich mache also in der schleife (while not eof) jeweils ein:
Delphi-Quellcode:
Setlength(Liste, length(Liste)+1);
Liste[High(Liste)] := s (aktuelle zeile)
die DAtei ist 4 MB groß (ungepackt)

und ich brauche 1, sehr sehr lange das auszulesen und 2. bruacht das ganze mehrere Hundert MB Arbeitsspeicher (und ist noch nicht mal sonderlich weit.

mich würde interessierern warum? die DAtei hat doch nur 4 mb?

Bsp: ein wörterbuch bei openoffice ist genauso aufgebaut - und die laden ja auch nicht stundenlang am anfang die wörterbuch Datei in den Arbeitsspeicher. Wie kann man das geschickt lösen um später z.B. ein bestimmtes wort zu suchen? ohne 4 gb ram zu haben und einen langen ladeprozess?

danke, Daniel

Thanatos81 4. Mär 2005 14:44

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Tritt der selbe Effekt auf, wenn du das ganze mit LoadFromFile in ne TStringList liest?

Neutral General 4. Mär 2005 14:50

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Delphi-Quellcode:
Setlength(Liste, length(Liste)+1);
Liste[Zählvariable] := s (aktuelle zeile)
Nicht eher so ?

Kedariodakon 4. Mär 2005 14:52

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Bei dem Dynamischen Array läuft das IMHO so:
Jedesmal wenn du die Länge erhöhst legt er dieses Array jedesmal neu im Speicher anlegt, den alten wert reinkopiert...
Wenn du das nun zeile für Zeile machst, könnte das dann der der grund sein, vielleicht solltest du erst die Länge bestimmen und dann die werte reintun...

Jedenfalls wenn ich mich nicht irre...


Bye

Zerolith 4. Mär 2005 14:52

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
Setlength(Liste, length(Liste)+1);
Liste[Zählvariable] := s (aktuelle zeile)
Nicht eher so ?

eh - nö? welche Zählervariable - so schreib ich immer in das gerade hinzugefügt Feld im Array.

Das mit der Stringlist probier ich schnell

Zerolith 4. Mär 2005 14:54

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Zitat:

Zitat von Kedariodakon
Bei dem Dynamischen Array läuft das IMHO so:
Jedesmal wenn du die Länge erhöhst legt er dieses Array jedesmal neu im Speicher anlegt, den alten wert reinkopiert...
Wenn du das nun zeile für Zeile machst, könnte das dann der der grund sein, vielleicht solltest du erst die Länge bestimmen und dann die werte reintun...

Jedenfalls wenn ich mich nicht irre...


Bye

Das klingt interessant. Ist es möglich vor dem Durchlaufen der gesamten datei festzustellen wieviele Zeilen drin sind?

Kedariodakon 4. Mär 2005 15:06

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Wie gesagt, ich bin mir mit dieser Aussage nich wirklich sicher, bei Strings.

Zitat:

Zitat von Zerolith
Das klingt interessant. Ist es möglich vor dem Durchlaufen der gesamten datei festzustellen wieviele Zeilen drin sind?

Word für Word auf #13#10 überprüfen oder besser gleich auf $0d0a und die dann zählen...
Vorrausgesetzt, es ist keine Datei im Unicode-Format...

Bye

Luckie 4. Mär 2005 15:09

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Zitat:

Zitat von Kedariodakon
Bei dem Dynamischen Array läuft das IMHO so:
Jedesmal wenn du die Länge erhöhst legt er dieses Array jedesmal neu im Speicher anlegt, den alten wert reinkopiert...
Wenn du das nun zeile für Zeile machst, könnte das dann der der grund sein, vielleicht solltest du erst die Länge bestimmen und dann die werte reintun...

Jedenfalls wenn ich mich nicht irre...

Du irrst nicht. ;)

Zerolith 4. Mär 2005 15:15

Re: Textdatei auslesen - braucht zu viel Speicher?
 
Zitat:

Zitat von Kedariodakon
Wie gesagt, ich bin mir mit dieser Aussage nich wirklich sicher, bei Strings.

Zitat:

Zitat von Zerolith
Das klingt interessant. Ist es möglich vor dem Durchlaufen der gesamten datei festzustellen wieviele Zeilen drin sind?

Word für Word auf #13#10 überprüfen oder besser gleich auf $0d0a und die dann zählen...
Vorrausgesetzt, es ist keine Datei im Unicode-Format...

Bye

Nur so oder? dauert das nicht etwas lang?


auf jeden fall Danke - werde das Array von vornherein festlegen


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz