AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Schnell Anzahl der Zeilen einer Textfile ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Schnell Anzahl der Zeilen einer Textfile ermitteln?

Ein Thema von Kedariodakon · begonnen am 21. Jan 2005 · letzter Beitrag vom 21. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:16
Wie macht man das am dümmsten?

Vorweg, die Files sind >5MB und haben Viele viele Zeilen

Bye
Christian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:17
Delphi-Referenz durchsuchenTStringList.LoadFromFile und Delphi-Referenz durchsuchenTStringList.Count dürften dir hier sehr viel weiterhelfen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:19
Soll nur die Anzahl der Zeilen ermittelt werden oder auch danach der Inhalt der Datei (z.B. in TStringList) verfügbar sein?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:19
Öhm nicht wirklich, dass dauert ewig

Das hatte ich vorher so...

bye


Edit: Nur die Anzahl der Zeilen!
Christian
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:25
Zitat von Kedariodakon:
Edit: Nur die Anzahl der Zeilen!
DU wirst nicht darum kommen die komplette Datei zu lesen.
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ß
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:25
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:27
Werd ich versuchen

Thx


Bye
Christian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 15:31
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;
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 16:18
Zitat von Kedariodakon:
Werd ich versuchen
Hab mal ein Bsp. von Luckie als Grundlage genommen:
( http://www.delphipraxis.net/internal...=295199#295199 )

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;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#10

Re: Schnell Anzahl der Zeilen einer Textfile ermitteln?

  Alt 21. Jan 2005, 16:30
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;
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz