![]() |
Text-Dateien hintereinander auslesen
Hallo,
ich habe drei Textdateien, deren Zeilen ich zähle. Jetzt brauche ich aber die Gesamtsumme aller Zeilen. Meine Frage: Wie läuft das mit der Rechenperformance? Kann bzw. sollte ich mit ruhigem Gewissen auf Knopfdruck drei Dateien hintereinanderer öffnen, auslesen, schliessen und die Ergebnisse den Labels zuweisen und darauf vertrauen, das die heutigen Rechner das schaffen und mir mein Programm nicht abstürzt? Gibt es eine kb-Grenze pro Datei, die ich bei solchen Aktionen nicht überschreiten sollte? Hoffe auf Eure Erfahrungen, Viele Grüsse, moperswings |
Re: Text-Dateien hintereinander auslesen
Moin,
eine Grenze gibt es mines Wissens nicht. Grundsätzlich ist das mit der Performance jedoch relativ. Öffne doch einfach eine Datei, ermittel die Zeilen, schließe sie wieder und nehm dir die nächste vor. das passtr alles gut in eine Schleife. Ich gehe jetzt mal davon aus, dass du Textdateien meinst (wegen Zeilen). Wenn ich zeilenweise auf Textdateien zugreifen will benutze ich immer TStringList. Ob das nun schnell ist war bei der Größe von Dateien bei mir bis jetzt nicht so relevant. Es lässt sich aber einfach händeln. Funzen würde das so, Stringlist creieren. In Schleife LoadfromFile aufrufen, Count ermitteln und merken, Clear, nächstes File. Das bis alle abgearbeitet sind und dann Stringliste frei geben. Gruß oki |
Re: Text-Dateien hintereinander auslesen
Da die Frage nach der Performance war, würde ich nicht die komfortable Methode mit den Stringlisten, sondern den ersteren Vorschlag von oki verwenden.
Edit: Ich musste letztens mit einem SQL-Skript mit 2,5 Mio Zeilen arbeiten, da ist die Stringliste mit Out Of Memory ausgestiegen. Das direkte verwenden der Datei hat problemlos funktioniert. |
Re: Text-Dateien hintereinander auslesen
Vielleicht auch so:
Delphi-Quellcode:
- benötigt kaum Speicher
var
dataFile: TextFile; line : String; i: Byte; LineCount: Int64; begin LineCount := 0; for i:=0 to FileNames.count -1 do begin assignFile(dataFile,FileNames[i]); reset(dataFile); while not eof(dataFile) do begin readln(dataFile,line); inc(LineCount); end; CloseFile(dataFile); end; end; ShowMessage('Zeilenzahl: 'Int64ToStr(LineCount)); end; Grüße Klaus |
Re: Text-Dateien hintereinander auslesen
Ich habe es in etwa mit dem Code probiert, den Klaus vorgeschlagen hat - nur dass ich halt alle drei Datensätzen hintereinander öffne, auslese und schliesse.
Läuft alles ohne Probleme! Es gibt aber wahrscheinlich auch elegantere Wege als meinen, um das Problem zu lösen! Vielen Dank und viele Grüsse, moperswings |
Re: Text-Dateien hintereinander auslesen
Zitat:
Wenn ich mehrere Dateien, die nur Text enthalten, in einer Schleife in einer! StringList zusammen führen möchte, hängt dann das LoadFromFile die Daten nacheinander in die Liste oder wird das StringList mit jeder neuen Datei wieder auf null zurück gesetzt?? :gruebel: |
Re: Text-Dateien hintereinander auslesen
Aus der Hilfe:
Zitat:
Klaus |
Re: Text-Dateien hintereinander auslesen
... also ich dachte, der leert den TStrings immer vorm einlesen? ... mal nachschaun ...
|
Re: Text-Dateien hintereinander auslesen
Ich vermute auch das es die Liste vorher leert. Hatte gestern Abend nämlich das
Problem, das immer nur die letzte Datei in die StringList eingelesen wurde.... Ansonsten danke Klaus :thumb: Werde das noch mal Zuhause checken. |
Re: Text-Dateien hintereinander auslesen
Zitat:
|
Re: Text-Dateien hintereinander auslesen
Nimm eine StringList zusätzlich (TempStringList) in die du immer den Text lädst und addiere nach dem Laden den Text an deine eigentliche Liste
Delphi-Quellcode:
Das ist sicher nicht die eleganteste Lösung, aber es wird sicher funzen.
MyStringList.Text := MyStringList.Text + TempStringList.Text;
Gruß oki |
Re: Text-Dateien hintereinander auslesen
Zitat:
![]() Gruß Hawkeye |
Re: Text-Dateien hintereinander auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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