Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi zeilen in txt datei zählen (https://www.delphipraxis.net/61831-zeilen-txt-datei-zaehlen.html)

3_of_8 26. Jan 2006 22:02

Re: zeilen in txt datei zählen
 
Also wenn die Anzahl der Zeichen pro Zeile konstant ist, einfach mit FindFirst die Datei finden, und sich vom TSearchRec der rauskommt die Dateigröße anschauen und die durch die Zeichen pro Zeile teilen.

omata 26. Jan 2006 22:05

Re: zeilen in txt datei zählen
 
So, habe nochmal was anderes probiert...

Delphi-Quellcode:
Vorschlag gelöscht wegen Nicht-Beachtung

GuenterS 26. Jan 2006 22:18

Re: zeilen in txt datei zählen
 
Ich habe gerade mal nachgesehen was denn so in den Sourcen von TListBox beim Aufruf von LoadFromFile passiert.

Es wird ein TFileStream erzeugt, welcher den gesamten Text einliest, welcher auf #10 bzw #13 geparst wird und der der Items Eigenschaft hinzugefügt wird.

Ich hab mir dann angeschaut wie TFileStream denn dann den Inhalt der Datei liest und festgestellt, dass diese sich einer kernel32 Funktion, nämlich ReadFile bedient.

Leider habe ich keine Implementierung zu Readln gefunden, da weiß anscheinend nur der Compiler selbst da dort eingebaut, wie diese funktionieren. Es wird vermutlich aber auch auf #10 bzw. #13 geparst werden.

Demzufolge könntest Du das ganze auch in einen Filestream schreiben und ihn rückwärts durchgehen bis du 15 mal #10 bzw. #13 gefunden hast, die Strings dazwischen entsprechen dann deinen Zeilen.

omata 26. Jan 2006 22:21

Re: zeilen in txt datei zählen
 
@GuenterS: was mache ich in meinem Beispiel?

Hansa 26. Jan 2006 22:32

Re: zeilen in txt datei zählen
 
Zitat:

Zitat von GuenterS
und wie lang hält dich das Laden in eine Stringlist auf?
oder wieviel mal schneller wäre es ohne gauge?

Beides ist irrelevant. Sollten aber wirklich nur die letzten Zeilen wichtig sein, dann würde ich mir mal ernsthat die Downto-Methode von Guenther ansehen. Zeit / Speicherverbrauch spielt wohl kaum eine Rolle. TStringlist hat allerdings noch folgende Nachteile : dran denken, Speicher von Hand wieder freizugeben, sofern das Programm danach weiterläuft und halt Speicherplatz. Der Vorschlag mit Dateigröße ist zwar auch gut, mir aber nicht wasserdicht genug.

tomsel 27. Jan 2006 08:08

Re: zeilen in txt datei zählen
 
Wieso brauchst du für die Fortschrittsanzeige unbedingt die Zeilenanzahl? Dafür reicht doch die Größe der Datei. Bei jeder mit Readln eingelesenen Zeile hast du mit der Zeilenlänge + 2 (CR+LF) die Anzahl der eingelesenen Bytes und kannst damit den Fortschritt entsprechend weiterrechnen. Dabei ist es vollig irrelevant, wieviele Zeilen in der Datei sind oder ob die alle gleich lang sind.

Hansa 27. Jan 2006 12:11

Re: zeilen in txt datei zählen
 
Ist das da für mich ?

Zitat:

Zitat von tomsel
Wieso brauchst du für die Fortschrittsanzeige unbedingt die Zeilenanzahl? Dafür reicht doch die Größe der Datei. Bei jeder mit Readln eingelesenen Zeile hast du mit der Zeilenlänge + 2 (CR+LF) die Anzahl der eingelesenen Bytes und kannst damit den Fortschritt entsprechend weiterrechnen. Dabei ist es vollig irrelevant, wieviele Zeilen in der Datei sind oder ob die alle gleich lang sind.

Viele Wege führen nach Rom, aber welcher ist der einfachste ? Bei mir sind die einzulesenden Dateien teilweise sehr groß. Die einzelnen Zeilen sind auch sehr lang und müssen zerstückelt werden und dann in die DB geschrieben werden. Das kann dauern. Dabei ist egal, ob 50 Min. oder 53. Jetzt wollte ich die zeilenanzahl mal sehen und habe die Datei mit readln gelesen. < 5 Sek. :shock: Was soll ich denn dann noch mit einer Stringliste rumfuchteln oder die Zeilenlänge berechnen (ja, Zeilen sind alle gleich lang) ? Das nächste ist die Effizienz. Statt meiner 5 Zeilen bräuchte ich dann 10-15. :mrgreen: Außerdem : lasse ich die Zeilenlänge außer acht, dann kann ich den Source unverändert für andere Dateien so verwenden. Dateiname abändern und fertig. Wie gesagt, der Einsatzzweck entscheidet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.
Seite 2 von 2     12   

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