![]() |
Schnell Anzahl der Zeilen einer Textfile ermitteln?
Wie macht man das am dümmsten? :gruebel:
Vorweg, die Files sind >5MB und haben Viele viele Zeilen :wink: Bye |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
|
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Soll nur die Anzahl der Zeilen ermittelt werden oder auch danach der Inhalt der Datei (z.B. in TStringList) verfügbar sein?
|
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Öhm nicht wirklich, dass dauert ewig :roll:
Das hatte ich vorher so... bye Edit: Nur die Anzahl der Zeilen! |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Zitat:
Aber Du brauchst Dir die Daten ja nicht merken (im Speicher) Also Datei komplett lesen und nach CR suchen (#13). Ausprobieren ob Traditionell (read(f,x)) oder Streams schneller sind. Viel Spaß ;-) |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Dann solltest Du die Datei Binär durchlaufen
1, Öffnen mit TFileStream 2a, Falls die Datei nicht >> 5 MB wird: Komplett in einen Schwung einlesen 2b, Falls Datei >> 5 MB häbchenweise einlesen, damit Windows nicht das Auslagern von Speicher anfängt 3, Per Speichervergleich nach CRLF-Kombinationen suchen und diese Zählen. TStringList mach sowas ähnliches, hat jedoch den Nachteil das es noch viel mehr Aktionen durchführt, die du fürs reine Zählen nciht benötigst |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Werd ich versuchen :zwinker:
Thx Bye |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Hmm... so?
Delphi-Quellcode:
var
Content: string; I, LineCount: Integer; D: DWORD; begin Content := (Inhalt der Datei); LineCount := 0; // Zeilenzahl der Datei for I := 0 to Length(Content) div sizeof(D) do begin Move(Content[I*sizeof(D)+1], D, sizeof(D)); D := D AND $0D0D0D0D; // Maske. Kommt das Zeichen #$0D (#13) vor, fängt eine neue Zeile an if D <> 0 then begin if D AND $0D = $0D then Inc(LineCount); if D AND $0D00 = $0D00 then Inc(LineCount); if D AND $0D0000 = $0D0000 then Inc(LineCount); if D AND $0D000000 = $0D000000 then Inc(LineCount); end; end; end; |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Zitat:
( ![]() Eine Datei >2,5 MByte brauchte bei mir 7 Sek. (Keine Ahnung wie viel das schneller wird, wenn der Buffer vergrößert wird)
Delphi-Quellcode:
function CountCR(const AFileName: string):Integer;
var Fs: TFileStream; BytesRead: Integer; Buffer: char; CR: Integer; begin CR := 0; Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone); try repeat BytesRead := Fs.Read(Buffer, Length(Buffer)); if Buffer = #13 then Inc(CR) until BytesRead < sizeof(Buffer); finally Fs.Free; Result := CR; end; end; |
Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?
Mal ganz einfach:
Delphi-Quellcode:
function getlength(const FileName: TFileName)
var datei:textfile str:string; begin result =0; assignfile(datei, FileName); reset(datei); while not eof(datei) do begin readln(datei, str); inc(result); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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 by Thomas Breitkreuz