Beste Methode zum ermitteln wieviele Zeilen eine Text-Datei hat.
-
Hi,
in der FAQ steht nur wie man herausfindet wie viele Zeichen in einer Datei sind.
Nun will ich aber herausfinden wie viele Zeilen in einer Datei sind.
Ich habe von zwei Methoden gehört zu ermitteln wie viele Zeilen sich darin befinden.-In einer do while Schleife immer aus der Datei lesen bis ein bestimmtes Zeichen kommt, dann einen ZeilenZähler inkrementieren und dann wieder einlesen und inkrementieren.... bis das ende der Datei erreicht ist.
-irgendetwas mit einer function eof, ich finde aber dazu nichts.
ausserdem gibt sie glaube ich nur aus das eine Datei zu ende ist, aber nicht in welcher Zeile.Kennt ihr irgendeine Beschreibung zu eof und was haltet ihr von der ersten Methode? Gibt es eine bessere Methode dafür?
Bitte kein Code.(sonst lerne ich nie etwas)
vielen dank im voraus.
cu max
-
Schau mal in der FAQ. Da findest Du ein Beispiel für std::getline .
Das in eine Schleife gepackt und gezählt. Eine andere Möglichkeit wäre vllt. iostreambuf_iterator mit std::count.
-
du könntest auch '\n' zaehlen
-
Vilen dank für eure Antworten.
Master_Max schrieb:
In einer do while Schleife immer aus der Datei lesen bis ein bestimmtes Zeichen kommt
Korbinian schrieb:
du könntest auch '\n' zaehlen
Meinte ich ja
. Soweit ich weis ließt getline() eh automatisch bis \n.
Knuddelbaer schrieb:
Das in eine Schleife gepackt und gezählt.
Ja, so meinte ich das auch, aber was soll ich den als abbruchbedingung der Schleifen nehmen? So in der Art habe ich es bis jetzt versucht.(Pseudocode)
int i(0); bool Running=true; do{ getline(Data,content); i++; }while(Running==true);
Ist natürlich klar, das ganze endet in einer Endlosschleife.
Was könnte ich den machen das wenn das Ende der Datei erreicht ist Running false wird?
Ich habe noch eine Idee dazu:(gerade eingefallen)
bool Running=true; int i(0); do{ if(!getline(Data,content)){ Running=false } else{ getline(Data,content); i++; } }while(Running==true);
Kann auch völliger Schwachsinn sein, kam mir gerade beim Schreiben.
Vielen dank im voraus.
cu max
-
Ist Data ein filestream:
int i(0); bool Running=true; do{ getline(Data,content); i++; }while(!Data.eof());
eof steht für end of file.
MfG MAV
-
while(std::getline(file,buffer)) ++lines;
-
Mis2com schrieb:
int i(0); bool Running=true; do{ getline(Data,content); i++; }while(!Data.eof());
Ah, ich hatte es mit eof so versucht:
int i(0); do{ getline(Data,content); i++; }while(eof==true);
Naja, meine Methode war ja auch ein bisschen hirnrissig.
kingruedi schrieb:
while(std::getline(file,buffer)) ++lines;
Ah, sorry auf die idee einen befehl direkt in die Schleifenbedingung zu schreiben kam ich trottel natürlich nicht. Muss man mehrere Befehle oder Variablenprüfungen dann auch mit und verknüpfen?
zb:while(getline(Data,content)&&i<1000){ i++; }
Vielen dank an alle.
cu max
-
Master_Max schrieb:
Ah, sorry auf die idee einen befehl direkt in die Schleifenbedingung zu schreiben kam ich trottel natürlich nicht. Muss man mehrere Befehle oder Variablenprüfungen dann auch mit und verknüpfen?
Ja.
-
Eine weitere Möglichkeit:
#include <fstream> #include <iterator> #include <algorithm> int main(int argc, char * argv[]) { std::ifstream datei("t:\\test.txt",std::ios::binary); std::istreambuf_iterator<char> beg(datei); std::istreambuf_iterator<char> end; long lines = std::count(beg,end,'\n'); return 0; }