Daten einer Datei Zeilenweise auslesen



  • Hallo zusammen,

    ich bin neu im Gebiet C++ Programmierung. Ich komme aus der Java-Welt. Diese Zeiger-Sachen machen mich momentan fertig.

    Meine Frage lautet: Wie kann ich mit C++ eine Textdatei Zeilenweise lesen und die Zeilen als String speichern, damit ich später daraus Substring machen kann, oder sie spliten kann?

    In Java könnte sowas folgenderweise aussehen:

    BufferedReader br = null;
    String line = "";
    try {
        br = new BufferedReader(new FileReader(new File(FileName)));
    
        line = br.readLine().trim();
        while (line != null) {
            if (line.toLowerCase().trim().startsWith("...")
                .....
           ........
         ........
        }
     }
    

    Danke voraus
    Gruß



  • #include <fstream>
    #include <string>
    #include <algorithm>
    
    int main()
    {
    
      std::ifstream file("blub.txt");
    
      while( !file.eof() )
      {
        std::string line;
        std::getline(file, line);
        std::transform(line.begin(), line.end(), line.begin(), tolower);
        // do smth with line
      }
    
      return 0;
    }
    

    so in der art z.b.



  • Das geht (ungefähr) so:

    #include <iostream>
    #include <string>
    #include <list>
    #include <fstream>
    
    using namespace std;
    
    int main(void)
    {
        ifstream theFile("myFile.txt");
        string currentLine;
        list<string> allLines;
        while(!theFile.eof())
        {
            getline(theFile, currentLine);
            allLines.push_back(currentLine);
        }
        //über alle eingelesenen Zeilen iterieren
        for(list<string>::iterator it = allLines.begin(); it != allLines.end(); ++it)
        {
             cout << *it << endl; //irgendwas mit der Zeile machen (z.B. ausgeben)
        }
        return 0;
    }
    

    Eigentlich sollte das aber in jedem guten C++ Buch erklärt werden.

    Felix



  • Hört bitte auf mit euren while(!file.eof()) Schleifen!



  • @Phoemuex: Bah!

    #include <fstream>
    #include <string>
    #include <algorithm>
    #include <cctype>
    
    int main()
    {
        std::ifstream file_stream("test.txt");
        if (!file_stream){ std::cerr << "FEHLER: Datei konnte nicht geöffnet werden!" << std::endl; std::cin.get(); return -1; }
    
        std::string line;
        while (std::getline(file_stream, line))
        {
            std::transform(line.begin(), line.end(), line.begin(), std::tolower);
            /* use var "line" of type "std::string" for something */
        }
        std::cin.get();
    }
    

    🙂



  • ....... schrieb:

    Hört bitte auf mit euren while(!file.eof()) Schleifen!

    Wieso? 😃



  • Weil das leicht zu Fehlern führt. Wird erst gesetzt, wenn der letzte Lesevorgang fehlgeschlagen ist. Es ist dann aber schon einer fehlgeschlagen.



  • Ich bin begeistert von dem Forum.

    Ich hätte nicht gedacht, dass so viele Antworten auf einmal kommen werden.
    Also, danke viel mal. Und weiter so. 🙂

    Gruß


Anmelden zum Antworten