Zeilen in Datei ermitteln.



  • Hallo,
    ich brauch da mal eine Anregung wie ich am schnellsten und saubersten ermitteln kann wie viele Zeilen in meiner Datei geschrieben sind. Derzeit mache ich es so:

    int getFileLines(ifstream &myFile)
    {
       int iLines =0;
       string sLine;
       while ( ! myFile.eof() ) {
          getline(myFile, sLine);
          iLines++;
       }
       return iLines;
    }
    

    gruß

    zyon



  • #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include <iterator>
    int main()
    {
        using namespace std;
        std::ifstream file("datei.txt");
        cout << "Anzahl Zeilen = " << count( istreambuf_iterator< char >( file ), istreambuf_iterator< char >(), '\n' ) << endl;
        return 0;
    }
    

    Gruß
    Werner



  • int getFileLines(ifstream &myFile)
    {
       return count( istreambuf_iterator< char >( myFile ), istreambuf_iterator< char >(),'\n');
    }
    

    Problem an dieser Funktion ist das wenn nix in der detie steht eine 0 ermittelt wird. Bei einem Datensatz eine 0 bei 2 Datensätzen eine 1. Das ja auch kein Problem bloß nur blöde das wenn nix drin steht auch einen 0 ermittelt wird.

    gruß

    zyon



  • return count( istreambuf_iterator< char >( myFile ), istreambuf_iterator< char >(),'\n') + 1;
    

    😉

    EDIT: Schliesst Du jeden Datensatz mit \n ab? Denn eigentlich sollte bei zwei Datensätzen eine 2 kommen, eine Textdatei schliesst üblicherweise jede Zeile mit \n ab und nicht nur jede bis auf die letzte.



  • LordJaxom schrieb:

    return count( istreambuf_iterator< char >( myFile ), istreambuf_iterator< char >(),'\n') + 1;
    

    😉

    Na super nun bekomme in anstat von 0,0 1,1 wieder wenn eine Zeile oder garnix drin steht.

    LordJaxom schrieb:

    EDIT: Schliesst Du jeden Datensatz mit \n ab? Denn eigentlich sollte bei zwei Datensätzen eine 2 kommen, eine Textdatei schliesst üblicherweise jede Zeile mit \n ab und nicht nur jede bis auf die letzte.

    Ich weiß ned wie der Editor von MS das macht aber ich denke der arbeit auch mir /n



  • zyon schrieb:

    Na super nun bekomme in anstat von 0,0 1,1 wieder wenn eine Zeile oder garnix drin steht.

    Oh man. Vielleicht bist du ja auch selbst in der Lage mal ein bisschen rumzuexperimentieren, anstatt dir hier alles vorkauen zu lassen. 🙄

    Hol dir nen Hex-Editor und schau nach, wie deine Dateien aufgebaut sind.

    Wenn jede Zeile mit \n abgeschlossen ist, gibt dir der weiter oben gepostete Code die genaue Anzahl der Zeilen zurück... Denn, wenn du eine Zeile hast, ist die mit einem \n abgeschlossen, der Code zählt ein \n und gibt dir eins zurück. Was ja richtig ist.

    Wenn zum Beispiel die letzte Zeile nicht mit \n abgeschlossen ist, musst du dir noch was zusätzliches einfallen lassen.


Anmelden zum Antworten