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