C++: Zeichen aus Datei einlesen



  • @manni66: 😃 Stimmt!



  • Vielen Danke. Aber ich sitz jetzt auf der Leitung. Wie kann ich den Fehler beheben sprich was muss ich am Code ändern?



  • z.B.

    class ReadFile {
    
    private:
      std::string filename;
      std::fstream file;
    
    public:
      ReadFile(std::string f)  {
        filename = f;
        file.open(filename.c_str(), std::fstream::in | std::ios::binary);
      }
    
      bool eof(){ return file.eof();  }
      bool good() { return file.good(); }
    
      char GetChar() {
        return file.get();
      }
    };
    

    und

    ReadFile F(filename);
    if(!F.good() ) {
       std::cerr << "Fehler\n";
       exit(1);
    }
    


  • und wo ist der witz darin einen ifstream so zu kapseln, wenn man ihn genausogut "pur" verwenden könnte?



  • mit dem neuen Code bekomme ich einen Fehler dass filename nicht deklariert ist.. der ist aber deklariert





  • Swordfish schrieb:

    und wo ist der witz darin einen ifstream so zu kapseln, wenn man ihn genausogut "pur" verwenden könnte?

    Nirgendwo. Der Prof/Hiwi ist zu blöd, etwas ordentliches zu schreiben.



  • jokki58 schrieb:

    Vielen Danke. Aber ich sitz jetzt auf der Leitung. Wie kann ich den Fehler beheben sprich was muss ich am Code ändern?

    dann hast Du u.U.das #include <string> vergessen oder gelöscht.

    Ich habe mir mal erlaubt, das Ganze zu überarbeiten:

    #include <iostream>
    #include <vector>    
    #include <fstream>
    
    // .. keine globalen Variablen
    
    int main(int argc, char *argv[]){
        using namespace std;
        if( argc < 2 )
            { cout << "Usage: gip-wc -w -l -c filename" << endl; return 0;} // wozu die Optionen ??
    
        const char* filename = argv[argc-1];    // reicht auch, statt std::string
        ifstream F( filename );
        if( !F.is_open() )
        {
            cout << "Fehler beim Oeffnen der Datei '" << filename << "'" << endl;
            return 0;
        }
    
        int lcount = 0, wcount = 0, ccount = 0, abcount = 0;    // lokal deklarieren
        enum Letztes_zeichen_typ { ANFANG, SPACE, NEUE_ZEILE, ABSATZ, SONSTIGES } letztes_zeichen = ANFANG;
        F >> noskipws; // Leerzeichen mit lesen
        for( char zeichen; F >> zeichen; ++ccount )
        {
            if( zeichen == '\n' )
            {
                ++lcount;   // Zeilen zählen
                if( letztes_zeichen == SONSTIGES )
                    ++wcount;   // Wort endete mit '\n'
                if( letztes_zeichen == NEUE_ZEILE )
                {
                    ++abcount;
                    letztes_zeichen = ABSATZ;   // so wird dreimal neue Zeile nicht als zwei Absätze gezählt.
                }
                else if( letztes_zeichen == SONSTIGES || letztes_zeichen == SPACE )
                    letztes_zeichen = NEUE_ZEILE;
            }
            else if( isspace( zeichen ) )
            {
                if( letztes_zeichen == SONSTIGES )
                    ++wcount;
                letztes_zeichen = SPACE;
            }
            else
            {   // sonstiges
                letztes_zeichen = SONSTIGES;
            }
        }
        // --   Nachbehandlung
        if( letztes_zeichen == SONSTIGES || letztes_zeichen == SPACE )
        {
            ++lcount;
            ++abcount;
        }
        else if( letztes_zeichen == NEUE_ZEILE )
        {
            ++abcount;
        }
    
        //Ausgabe
        cout << endl;
        cout << "Die Datei \"" << filename << "\" hat: " << endl;
        cout << "\t" << lcount << " Zeilen"<< endl;
        cout << "\t" << wcount << " Woerter" << endl;
        cout << "\t" << ccount << " Zeichen"<< endl;
        cout << "\t" << abcount << " Absaetze" << endl;
    
        return 0;
    }
    

    Gruß
    Werner



  • Danke Werner. Jetzt klappt es teilweise 😕 Ich kompilier das Programm aber dann muss ich ja " gip-wc -w -l -c filename" eingeben aber dann sagt der mir " gip-wc : command not found" woran liegt das?



  • Dein Programm liegt nicht in den Verzeichnissen der PATH Environmentvariablen.

    Auf Linux kannst du mal ./gip-wc probieren, wenn das Programm im aktuellen Verzeichnis ist.

    Welches System/Compiler/IDE nutzt du?



  • Das Programm funktioniert jetzt. Vielen Dank an alle 🙂


Anmelden zum Antworten