Seite 1 von 1

Anzahl der Zeilen in einer Textdatei ermitteln /Schleifen...

Verfasst: 25.07.2006 23:30
von HoDam
Wie kann ich die Anzahl der Zeilen in einer Textdatei ermitteln.

ok mit dem Openfile öffnen (würde auch ein readfile reichen, da ich in der originaldatei nichts ändern möchte?)

Mit welchem Befehl kann ich die Anzahl der Zeilen ermitteln. Ich benötige diese Zahl für eine Counter um eine Fortschrittsanzeige zu erstellen.

Re: Anzahl der Zeilen in einer Textdatei ermitteln /Schleife

Verfasst: 25.07.2006 23:39
von Kiffi
> Wie kann ich die Anzahl der Zeilen in einer Textdatei ermitteln.

wie schon besprochen: ReadFile() : While EOF() = 0 : ReadString : Counter +1

andere Möglichkeit: Die Datei in einem Rutsch mit ReadData() einlesen
und dann die Anzahl der Zeilenumbrüche zählen. Könnte bei grossen
Dateien hinsichtlich des Speicherbedarfs aber problematisch werden.

Noch 'ne andere Möglichkeit: Den Dateizeiger (LOC()) in Relation zur
Gesamtgrösse (LOF()) der Datei setzen.

> würde auch ein readfile reichen, da ich in der originaldatei nichts ändern
> möchte?)

ReadFile() ist völlig ausreichend, wenn Du lesend auf eine Datei
zugreifen willst. OpenFile() habe ich noch nie benutzt.

Grüße ... Kiffi

Verfasst: 25.07.2006 23:52
von HoDam
Hallo Kiffi,

du machst wohl nie Feierabend. kommt mir aber gelegen ;-)

1. Deine erste Lösung bringt mir nichts (oder ich verstehe sie nicht), da ich ja vorab die Zeilenanzahl benötige.

2. Komplett einlesen kann problematisch werden, da die Textdateien bis zu 20MB groß werden können.

3. Das bezieht sich auf die Anzahl der Zeichen in einer Datei. Da muss er aber ziemlich viel rödeln?.


Naja, werde ich mich morgen mit beschäftigen.

Ein gute Nacht

Verfasst: 26.07.2006 00:20
von winduff
Die erste lösung von Kiffi ist schon richtig:

Code: Alles auswählen

ReadFile(0,"datei.txt")
While Eof() = 0 
  ReadString(0)
  Counter +1 
Wend
CloseFile(0)
debug Counter ;Soviel Zeilen gibts
  

Verfasst: 26.07.2006 03:34
von Just_reading
So gehts auch.
Aber auch eine 20 MB Datei musst du einlesen bevor dein Programm wissen kann wieviele Zeilen sich in ihr befinden.

Code: Alles auswählen

If ReadFile (1,"textdatei.txt")
   *mem=AllocateMemory (Lof(1))
   ReadData (1,*mem,Lof(1))
   Lines.l=CountString (PeekS (*mem,Lof(1)),#CR$)
   Debug Lines.l
   CloseFile (1):FreeMemory (*mem)
EndIf

Verfasst: 30.07.2006 18:59
von Kaeru Gaman
hm... mal um die ecke gedacht..
sind deine datensätze alle garantiert gleich lang?

weil..

irgendwie müsste man doch die dateigröße auslesen können,
die wird ja schließlich auch im explorer angezeigt.

und die gesamtgröße eben durch die anzahl zeichen pro datensatz teilen,
dann hat man die anzahl datensätze.

sollte für nen fortschrittsbalken reichen, muss ja nich sooo exakt sein.


die andere möglichkeit wäre eben, eine absolute zahl anzuzeigen, wieviel datensätze bearbeitet wurden,
dann muss der benutzer halt abschätzen, wie langs dauert, aber das ist immerhin besser als ein gar kein lebenszeichen.

Verfasst: 30.07.2006 19:34
von HoDam
Hallo,
das ist ein gute Idee.
innerhalb einer Exportdatei haben die Datensätze immer die gleiche Länge, aber jeder Datei kann eine unterschiedliche haben.
Sicherlich läßt sich dadurch die Zeilenanzahl ermitteln. Mir kommt es ja nicht darauf an das es 100% stimmt, sondern ich möchte nur das der Anwender sieht, das was passiert. Bei kleinen Datenmengen(<10000) ist das unerheblich, aber da ich auch Dateien mit bis zur 1000000 Datensätze habe, Hier dauert das ersetzen mit wegschreiben in eine neue Datei ca. 4min und dann ist es sinnvoll ein Fortschrittanzeige einzubauen.

Danke für den Ansatz

Verfasst: 30.07.2006 19:57
von Kaeru Gaman
> innerhalb einer Exportdatei haben die Datensätze immer die gleiche Länge, aber jeder Datei kann eine unterschiedliche haben.

dann kannst du ja nach einlesen des ersten datensatzes die gesamtzahl ermitteln. ;)