![]() |
Zeilen in einer Datei zählen
Hallo,
gibt es eine einfache möglichkeit, rauszubekommen, wieviele zeilen eine datei hat? Es handelt sich dabei um recht kurze zeilen, aber bis ca 65000 stück. MFG Martin |
Re: Zeilen in einer Datei zählen
Hallo Martin,
am einfachsten dürfte es sein, die Datei in eine TStringList zu laden und deren Eigenschaft Count abzufragen. Gruß Hawkeye |
Re: Zeilen in einer Datei zählen
Oder so:
Delphi-Quellcode:
Var F: TextFile;
Count: Integer; Count := 0; AssignFile(F, ...); FileMode := fmOpenRead; Reset(F); While not EoF(F) do Begin ReadLn(F); Inc(Count); End; CloseFile(F); |
Re: Zeilen in einer Datei zählen
Noch eine Möglichkeit : Dateigröße durch Länge der Zeilen teilen. Geht allerdings nur richtig, sofern alle Zeilen gleich lang sind !
|
Re: Zeilen in einer Datei zählen
Vielen Dank für die Antworten.
zeilen sind nicht exakt gleich lang, können um 1-2 zeichen vareieren. ich hab mich jetzt für die TStringlist entschieden, hab aber noch 'ne frage, ob ich so speicher verliere:
Delphi-Quellcode:
die stinglist wird so ja 8 mal mit werten gefüllt. aber was passiert mit dem allokierten speicher der vorhergehenden einträge?
fileData := TStringList.Create;
for i := 1 to 8 do begin IF FileExists(filename[i]) then begin fileData.LoadFromFile(filename[i]); count[i]:=filedata.Count; end else count[i]:=0; end; filedata.Destroy; Gruß Martin |
Re: Zeilen in einer Datei zählen
Der Speicher sollte beim erneuten Füllen wieder freigegeben werden.
PS: Schon mal die Online-Hilfe zu ![]() Gruß Hawkeye |
Re: Zeilen in einer Datei zählen
Was ist mit himitsus Vorschlag ? Würde mich mal interessieren, was die Stringliste interessanter macht. Wenn die Zeilen nicht gleich lang sind, ist das der einfachste Vorschlag zum Ziel zu kommen. Und das ohne Create und Delete und Speicher. 8) Es gibt Error oder eben nicht, zumindest aber kein sich langsam aufbauendes Speicherleck.
|
Re: Zeilen in einer Datei zählen
Zitat:
|
Re: Zeilen in einer Datei zählen
Himitsu, was redest Du da ? Ich meine das :
Zitat:
|
Re: Zeilen in einer Datei zählen
Also, selbst wenn bei TextFile ein Fehler auftreten sollte dann ist wäre das Speicherleck jedenfalls geringer, als wenn was bei der StringList passiert (nach den obrigen Codes)
Aber man kann ja auch nochmehr an Code einsparren und die ganzen I/O-Checks weglassen
Delphi-Quellcode:
Var F: TextFile;
Count: Integer; Count := 0; AssignFile(F, ...); FileMode := fmOpenRead; {$I-} Reset(F); While not EoF(F) do Begin ReadLn(F); Inc(Count); End; CloseFile(F); {$I+} If IOResult <> 0 Then Count := -1; // Count >= 0 Count = Zeilenanzahl // Count = -1 Fehler Aber hast du dir mal angesehn, was TStringList.LoadFromFile macht? Das erstellt erstmal 'nen FileStream kopiert den Inhalt der Datei in einen String zerlegt den großen String in kleine Strings und fügt diese kleinen Strings in die StringListe ein ... und zwar jeden einzeln (was intern auch wieder einiges an rumcopieren verursacht) und gibt zum schluß wieder die beiden Strings und den FileStream frei (man hat also zeitweise über das Doppelte der Dateigröße im RAM und wenn die Datei aus nur einem String besteht sogar as Dreifache ... tja und zum Schluß muß auch alles wieder freigegeben werden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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