AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilen in einer Datei zählen

Ein Thema von happyaura · begonnen am 20. Mai 2006 · letzter Beitrag vom 20. Mai 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#11

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 05:59
Da stimme ich zu, was noch geht ist einen Grösseren Block zu lesen um die Geschwindigkeit zu erhöhen (Blockread).
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 08:10
Und hier mal eine kleine Anregung von mir *g*
Delphi-Quellcode:
function CountLines(const aFileName: string): Integer;
var
  DateiStream: TFileStream;
  CurrentByte: Word;
  Zeilen: Integer;
const
  LineBreak = 10;
begin
  result := -1;
  if (FileExists(aFileName)) then
  begin
    DateiStream := TFileStream.Create(aFileName, fmOpenRead);
    try
      zeilen := 0;
      if (DateiStream.Size > 0) then
      begin
        zeilen := 1;
        DateiStream.Position := 0;
        while DateiStream.Position < DateiStream.Size do
        begin
          DateiStream.Read(CurrentByte, 1);
          if (CurrentByte = LineBreak) then
          begin
            Inc(Zeilen);
          end;
        end;
      end;
    finally
      DateiStream.Free;
    end;
    result := Zeilen;
  end;
end;

procedure TDemoForm.btn_testClick(Sender: TObject);
var
  Zeilen: Integer;
begin
  Zeilen := CountLines('c:\test.txt');
  ShowMessageFmt('%d', [Zeilen]);
end;
Stephan B.
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#13

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 15:31
Hallo, da bin ich wieder.

Erst einmal auf die frage, warum ich mich für TStrinGrid entschieden hab. Hab den datentyp noch nicht benutzt und einfach mal ausprobieren wollen. Vielen Dank für den Hinweis mit .Destroy und .Free, hatte mir die hilfe nicht angeschaut und dacht mir .destroy könnt das tun, was ich will und das tat es dann auch (irgendwie ). Außerdem

Es handelt sich nicht um große Dateien, sind kleiner als 1 MB, in sofern hab ich zeitlich keinen unterschied zu der methode von himitsu gesehen.
Aber vielleicht ist es ein wenig mit Spatzen auf Kanonen schießen (oder so ähnlich ), um so ein kleine süße Integer zu bekommen.
Nun bleibt nur noch die frage: TextFile oder FileStream, sprich Code von himitsu oder Sharky.

Vielen dank erst einmal für eure ausführlichen Erläuterungen.

Gruß Martin

P.S. Kann mir vielleicht noch jeman sagen, wie man in einer Combobox es hinbekommt, dass man dort keine Eingaben tätigen kann, sondern nur aus den vorgegebenen werten wählen kann? Ich konnte die entsprechende Einstellung leider nicht finden. Eigentlich gehört das nicht zu diesem Topic, lohnt aber kaum, ein neues Topic aufzumachen, oder?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 15:35
Zitat von happyaura:
P.S. Kann mir vielleicht noch jeman sagen, wie man in einer Combobox es hinbekommt, dass man dort keine Eingaben tätigen kann, sondern nur aus den vorgegebenen werten wählen kann? Ich konnte die entsprechende Einstellung leider nicht finden. Eigentlich gehört das nicht zu diesem Topic, lohnt aber kaum, ein neues Topic aufzumachen, oder?
Ok, ich sage es dir auch ganz leise: TComboBox.Style = csDropDownList

Gruß Hawkeye
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#15

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 16:35
ah, vielen dank. dann ist es nicht verwunderlich, dass ich es nicht gefunden hab, war primär auf der suche nach einem boolwert, den ich auf true oder false setzen muß...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: Zeilen in einer Datei zählen

  Alt 20. Mai 2006, 17:29
Zitat von happyaura:
...Nun bleibt nur noch die frage: TextFile oder FileStream, sprich Code von himitsu oder Sharky.
Ist das denn immer noch nicht klar ? Bei himitsus Variante muß nicht extra Speicher alloziert werden. Insofern braucht man sich auch nicht um die Freigabe kümmern. Lediglich eine Variable als Puffer für readln (t,st); Stop ! Nicht mal die braucht man. readln (t); reicht zum zählen. Das ist sehr kurz zu machen. Sharkys Variante hat auch einen Vorteil : es erscheint kein .NET-Hinweis von wegen "File of : unsicherer Typ". Deshalb ist es gut, daß auch die Stream Variante hier drin steht. Falls einer seine Textdateien rausschmeißen will und nicht weiß wie das anders geht.

Aber noch ein Effekt am Rande, weil die Geschwindigkeit erwähnt wurde. Mußte auch mal zigtausend Zeilen einlesen und in DB schreiben. Der Code sah ungefähr so aus :

Delphi-Quellcode:
readln (t,st);
Memo1.Lines.Add (st);
// in DB wegschreiben
Überlegung war folgende : was in die DB muß, das könnte man ja zumindest teilweise anzeigen, um zu sehen wie weit das Programm ist. Je nach Dateigröße lief das so ca. 5 Min. Was jetzt kommt ist kein Witz ! Das wollte keiner glauben, inkl. mir ! Das Programm lief plötzlich viel schneller. Allerhöchstens noch 2 Min. Gut, völlig unmöglich : DB gelöscht. Laufen lassen : die Daten waren da, wie vorher auch schon. Dateidatum von DB überprüft. Tja, die Zeit stimmte. Neuer DB-Cache irgendwie aktiviert, oder was gibts noch was es nicht geben sollte ?? Also Sicherung vom Vortag überspielt : 5 Min. Dann habe ich den Source verglichen. Zeile für Zeile, ob da event. eine größere Gruppe von DB-Feldern aus Versehen weg war. Nichts ! Bis auf diese Stelle war der Source identisch :

Delphi-Quellcode:
readln (t,st);
//Memo1.Lines.Add (st);
// in DB wegschreiben
Lediglich das Memo war auskommentiert, aber das war ja wohl ziemlich egal. Denkste ! Die Anzeige mit dem Memo war alleine für den Effekt verantwortlich ! Sonst nichts. Das ist auch eindeutig reproduzierbar. Ich glaube nicht, daß irgendwer zwischen readln oder Stream einen Effekt beobachtn kann, der nur irgendwie in die Nähe solcher Zeitunterschiede kommt.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:22 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