Zeichenweise aus Datei lesen



  • Hallo,
    Wie kann ich den Inhalt eienr Datei Zeichenweise einlesen?



  • so:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main ()
    {
        ifstream in ("bla.txt");
    
        while (!in.eof ())
            cout << (char)in.get ();
    }
    


  • Irgendwie geht es auf Win nicht 😕 Es kommt immer diese "Programm hat einnen Fehler verursacht.." Meldung... Aber es muss erstmal nru auf Linux gehen 😉

    Noch eine Frage:
    Am ende kommt immer ein ÿ (y mit Punkten drüber). Wie kann ich das ändern? Warum ist das so?



  • das liegt einfach daran, dass du EOF ausgibst, da die Funktion std::istream::eof erst war wird, wenn du bereits EOF gelesen hast

    int main() {
      std::istream in("x");
      char c;
      while(in.get(c))
        std::cout << c;
    }
    


  • Habe es bei mir extra getestet und da ging es so ohne komische Zeichen 😕



  • Ich nochmal...
    Ich muss/will das einlesen der Zeichen in eine Klasse packen weil ich noch etwas damit vor hab...
    Aber es geht nicht.. (wie kann es anders sein? :()

    class LoadFile
    {
       void OpenFile(char* file);
       char ReturnToken();
       void CloseFile();
    };
    
    void LoadFile::OpenFile(char* file)
    {
       std::ifstream in(file);
    }
    
    char LoadFile::ReturnToken()
    {
       char token;
       in.get(token);
       std::cout << token;
    }
    
    void LoadFile::CloseFile()
    {
       in.close();
    }
    

    Meldung:

    read.cpp:13: warning: all member functions in class `LoadFile' are private
    read.cpp: In method `char LoadFile::ReturnToken()':
    read.cpp:23: `in' undeclared (first use this function)
    read.cpp:23: (Each undeclared identifier is reported only once
    read.cpp:23: for each function it appears in.)
    


  • das sollte besser sein

    class LoadFile
    {
    public:
       void OpenFile(char* file);
       char ReturnToken();
       void CloseFile();
    protected:
       std::ifstream in;
    };
    
    void LoadFile::OpenFile(char* file)
    {
       in.open(file);
    }
    
    char LoadFile::ReturnToken()
    {
       char token;
       in.get(token);
       std::cout << token;
       return token;
    }
    
    void LoadFile::CloseFile()
    {
       in.close();
    }
    

    K



  • Danke...

    So das ist jetzt die letzte Frage zu dem Thema 😉
    Ich hab die Klasse jetzt in der read.cpp aber ich will über die main.cpp auf Sie zugreifen können. Wie macht man das?



  • Du kannst in der Headerdatei (.h) die Klassendeklaration schreiben. In der .cpp die Definition und in deinem main Programm das/die Objekt(e) erzeugen.

    //klasse.h
    #infdef klasse_h
    #define klasse_h
    class klasse 
        {
        bla bla bla
        };
    #endif
    
    //klasse_main.cpp
    #include "klasse.h"
    Objekte erzeugen
    
    //klasse.cpp
    #include "klasse.h"
    Definition deiner Klasse. Bereichsoperator (::) nicht vergessen.
    


  • Warum liest du nicht einfach ein C++ Tutorial, nur durch raten programmiert man nicht 🙄

    http://tutorial.schornboeck.net/oop2.htm
    http://tutorial.schornboeck.net/uebersetzungseinheiten.htm



  • Danke ihr!
    @kingruedi
    Du hast recht ich sollte mal ein utes Tutorial lesen! Aber ich habe hauptsächlich Tutorials gefunden die ich entweder nicht verstehe oder die sowas wie void main()... Aber tutorial.schornboeck.net scheint ein gutes zu sein 😉
    @all
    Es geht nicht 😞

    //main.cpp
    #ifndef IOSTREAM
    #define IOSTREAM
    #include <iostream>
    #endif
    #include "read.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
       LoadFile test;
       test.OpenFile("test.txt");
       test.ReturnToken();
       test.CloseFile();
       return 0;
    }
    
    //read.cpp
    #ifndef FSTREAM
    #define FSTREAM
    #include <fstream>
    #endif
    #include "read.h"
    
    using namespace std;
    
    void LoadFile::OpenFile(char* file) 
    { 
       in.open(file); 
    } 
    
    char LoadFile::ReturnToken() 
    { 
       char token; 
       in.get(token); 
       return token; 
    } 
    
    void LoadFile::CloseFile() 
    { 
       in.close(); 
    }
    
    //read.h
    #ifndef LoadFile
    #define LoadFile
    class LoadFile
    {
    public:
       void OpenFile(char* file);
       char ReturnToken();
       void CloseFile();
    protected:
       std::ifstream in;
    };
    #endif
    

    Meldung beim Compilen:

    tester@Linux:~/source$ g++ -o prog main.cpp read.cpp
    In file included from main.cpp:5:
    read.h:10: syntax error before `;'
    read.h:11: anonymous class type not used to declare any objects
    main.cpp: In function `int main(int, char **)':
    main.cpp:11: `test' undeclared (first use this function)
    main.cpp:11: (Each undeclared identifier is reported only once
    main.cpp:11: for each function it appears in.)
    In file included from read.cpp:5:
    read.h:11: anonymous class type not used to declare any objects
    read.cpp:9: parse error before `('
    read.cpp:14: parse error before `('
    read.cpp:17: syntax error before `.'
    read.cpp:21: parse error before `('
    tester@Linux:~/source$
    

    //Edit die Compilermeldung zugefügt 😉
    //@ZuK Wenn du denkst das das mein Programm werden soll...Naja das eigendlich Programm werde ich selber progen 😛



  • Plutonium schrieb:

    Es geht nicht 😞

    einen kleinen beitrag zu "deinem" programm solltest du schon leisten.
    nehme mal an es liegt erstmal daran wie du die klasse LoadFile verwendest.
    K.


Anmelden zum Antworten