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

Anfängerfragen zum Programmieren mit PureBasic.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

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

Beitrag 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.
PB 4 Final
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Anzahl der Zeilen in einer Textdatei ermitteln /Schleife

Beitrag 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
a²+b²=mc²
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag 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
PB 4 Final
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag 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
  
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Just_reading
Beiträge: 13
Registriert: 26.07.2006 03:26

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
HoDam
Beiträge: 82
Registriert: 19.11.2004 13:57
Wohnort: Köln, Cologne

Beitrag 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
PB 4 Final
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten