Datei mit Get zeilenweise auslesen



  • Hallo,
    ich bekomme es absolut nicht hin eine Datei zeilenweise mit get auszulesen. Mit getline schaffe ich es. Mein Problem ist aber, dass der Delimiter nicht entfernt werden soll. Die Get-Methode soll einen streambuf zurückgeben.

    Außerdem würde ich noch gerne wissen wie ich einen String zeilenweise auslesen kann (diesmal geht auch getline).

    Schon mal vielen Dank für eure Bemühungen, Neo2k3



  • Also irgendwie findet zu diesem Thema nirgendwo etwas, es wird alles mit getline gemacht, bin jetzt schon ewig im Forum und bei Google am suchen... 😞



  • Hi,

    wie hast du es denn probiert ? Und was heisst "geht nicht" ?

    Prototyp

    basic_istream& 
    get(char_type* s, streamsize n, char_type delim);
    

    Ich vermute mal dass es diese version ist die du willst!?

    Zum zweiten problem

    std::ifstream in("somefile");
    std::string line;
    
    std::getline(in,line);
    

    Die such hier ist momentan nicht die beste aber das müsste auch in den FAQs stehen.



  • Zuerst einmal zum zweiten Problem:

    std::ifstream in(Daten.c_str()); // Daten ist std::string
    std::string line;
    for (int i=0; i<10; i++) {
    	std::getline(in,line);
    	cout << line << endl;
    }
    

    Ich habe es mal so versucht, aber er gibt mir nur Leerzeilen aus. Ich vermute mal, dass er jetzt versucht eine Datei zu öffnen und keinen String.

    Zum ersten Problem:
    Bis jetzt habe ich alles auf einmal eingelesen:

    std::stringstream buf;
    buf << std::ifstream(Pfad.c_str()).rdbuf();
    Daten = buf.str();
    

    Dann habe ich es mit Get versucht, aber wie gesagt erfolglos (die Prototypen sind mir übrigens bekannt, ich möchte diesen: get( streambuf&, char );):

    std::stringstream in = std::stringstream(Pfad);		
    std::istream EingabeDatei(in);
    while (!EingabeDatei.eof()) {
    	char *temp;
    	EingabeDatei.get(temp, ';');
    	Daten = Daten + temp;
    	std::cout << "test: " << temp;
    }
    

    Ja die Suche ist wirklich nicht sehr gut, den Artikel dazu habe ich gelesen.

    Ich hoffe, dass du mir weiterhelfen kannst...



  • Hi,

    Ich habe es mal so versucht, aber er gibt mir nur Leerzeilen aus. Ich vermute mal, dass er jetzt versucht eine Datei zu öffnen und keinen String.

    Oh da habe ich deinen ausgangspost nicht richtig gelesen.
    Das geht mit stringstreams.

    #include<sstream>
    
    std::istringstream in("irgend einlanger text\nzeile2\nzeile3\nzeile4");
    
    //der rest war schon richtig
    std::string line;
    while(std::getline(in,line))
        std::cout<<line<<"\n";
    

    Zum ersten problem:

    In deinem code allokierst du keinen speicher für temp und gibst keine größe für den puffer an. Es wundert mich dass das überhaupt kompiliert.



  • OK ein Problem gelöst. Aber mit dem streambuf habe ich so meine Probleme.

    In deinem code allokierst du keinen speicher für temp und gibst keine größe für den puffer an

    Wie geht das?



  • Also du willst mit get zeilenweise aus der datei lesen, richtig ?

    Ok datei öffnen, weisst ja wies geht.

    char buffer[512];
    in.get(buffer,512,'\n'); 
    
    //und jetzt mit dem buffer weiter arbeiten
    
    //oder aber du machst es dynamisch
    char *buffer = new char[512]; //oder wie groß auch immer dein buffer sein soll
    in.get(buffer,512,'\n');
    
    //mach was
    
    delete [] buffer;
    

Anmelden zum Antworten