fstream Problem



  • Hallo,
    ich habe ein Problem mit dem Einlesen aus einer Datei!

    while(filein.eof() == false) {
        int i=0;
        filein.getline(tmpP, sizeof(tmpP));
        i++;
        }
        for (int i=0; i<=sizeof(tmpP); i++) {
        cout << tmpP[i];
        }
    

    Zuvor wurde noch die Variable

    char tmpP[1000];
    

    deklariert!
    In der Datei steht folgendes:
    Hey
    Hkk
    Die Ausgabe des Programms:
    kk

    Wie kriege ich es hin, das die einzelnen Zeilen der Datei in jeweils einen Element eines String-Arrays rein?
    In meinem alten Compiler habe ich das immer wunderbar hingekriegt!



  • Du überschreibst in der Schleife jeweils den vorhegehenden Wert aus dem Array. Da ist klar, daß nur die letzte Zeile übrig bleibt.

    Ich würde dir empfehlen, vorerst auf nackte Arrays zu verzichten und mit STL-Klassen zu arbeiten:

    string zeile;
    vector<string> datei;
    while(getline(filein, zeile))
      datei.push_back(zeile);
    for(size_t i=0;i<datei.size();++i)
      cout<<datei[i]<<endl;
    

  • Mod

    #JP schrieb:

    Wie kriege ich es hin, das die einzelnen Zeilen der Datei in jeweils einen Element eines String-Arrays rein?

    Ein Anfang wäre die Benutzung von Strings 😉

    So eben aus dem Handgelenk, ohne auf Syntaxfehler zu prüfen:

    #include<vector>
    #include<fstream>
    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
     vector<string> zeilen;
     {
      ifstream datei("Bla.txt");
      string zeile;
      while(getline(datei, zeile)) 
       zeilen.push_back(zeile);
     }
     cout<<"Inhalt der Datei zeilenweise:\n";
     for(unsigned int i=0; i<zeilen.size(); ++i)
      cout << zeilen[i] << '\n';
    }
    


  • So habe ich es mir auch gedacht, aber:
    Fehlermeldung des Compilers:
    /main.cpp:31:22: error: no matching function for call to ‘std::basic_string<char>::push_back(std::string&)’
    /usr/include/c++/4.5/bits/basic_string.h:1000:7: note: candidate is: void std::basic_string<_CharT, _Traits, _Alloc>::push_back(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>] 😡



  • Und worauf genau bezieht sich diese Fehlermeldung? In den Beispielcodes von uns kommt kein string::push_back() vor (und SeppJ's Code lief auch ohne Fehler durch die ideone).



  • In SeppJ's Code kam ein string::push_back() vor:
    Zeile 15!
    Fehlermeldung bezieht sich auf string::push_back()!
    Die gleiche kam bei mir schon einmal, ich habe dann den String durch einen SString ersetzt und es ging!
    Vll. ist mein Compiler veraltet oder so...



  • #JP schrieb:

    In SeppJ's Code kam ein string::push_back() vor:
    Zeile 15!

    Genau lesen - zeile ist ein string, zeilen ist ein vector<>



  • 💡 Ein Licht geht auf...
    Habe Zeile und Zeilen miteinander verwechselt!


Anmelden zum Antworten