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.
Anzahl der Zeilen in einer Textdatei ermitteln /Schleifen...
Re: Anzahl der Zeilen in einer Textdatei ermitteln /Schleife
> 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
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
a²+b²=mc²
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
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
PB 4 Final
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
-
- Beiträge: 13
- Registriert: 26.07.2006 03:26
So gehts auch.
Aber auch eine 20 MB Datei musst du einlesen bevor dein Programm wissen kann wieviele Zeilen sich in ihr befinden.
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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
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
PB 4 Final
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22