Schreiben von Werten in eine Textdatei mit einer Funktion



  • Hallo,

    ich habe bereits folgendes probiert:

    //testofmain.cpp
    #include <iostream>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    void TextToTxt(double a,double b);
    
    void main()
    {
    	ofstream ausgabe("ausgabe.txt");
    	ausgabe << "Hier steht die includeanweisung (darf nur einmal in die Datei)" << endl;
    
    	double a, b;
    
    	for(int i=0; i<4; i++)
    	{
    		a+=5;
    		b+=10;
    		void TextToTxt(a,b);
    	}
    
    }
    

    und hier die Funktion:

    //functiontest.cpp
    
    #include <iostream>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    //Funktion zum Anhängen an die Textdatei
    void TextToTxt(double a,double b)
    {
    	ofstream ausgabe("ausgabe.txt");
    	ausgabe << "\nWerte für a: " << a << endl;
    	ausgabe << "\nWerte für b: " << b << endl;
    }
    

    dabei will ich beliebig viel und vor allem flexibel Werte an diese Datei anhängen. Hab auch schon überlegt, alles in einen String umzuwandeln ( in der Funktion) und dann einfach direkt als Text an die Textdatei zu übergeben ...
    Hat jemand einen Tip?



  • versteh ehrlich gesagt das problem nicht. soll das eine art konfigurationsdatei werden, in der für bestimmte variablen werte festgelegt werden?



  • nein, man kann sich das so ungefähr vorstellen, wie wenn ich zum Beispiel eine Vrml - Datei schreiben will. Dann muss ich am Anfang der Datei "#VRML V2.0 utf8" eingeben.
    Jedoch will ich dann immer weiter in diese Datei schreiben und möchte dazu eine Funktion benutzen. Ist das möglich?



  • Da wir schon (in nem andren Thread) die Diskussion über Anfänger und den Standard hatten, noch ein Hinweis:

    Statt:

    void main()
    {}
    

    bitte:

    int main()
    {}
    

    Jedoch will ich dann immer weiter in diese Datei schreiben und möchte dazu eine Funktion benutzen. Ist das möglich?

    Klar ist das möglich. Du musst in der Funktion nur Zugriff auf den Stream haben, oder den Stream neu öffnen mit der Option das der Inhalt nicht gelöscht wird.



  • Klar ist das möglich. Du musst in der Funktion nur Zugriff auf den Stream haben, oder den Stream neu öffnen mit der Option das der Inhalt nicht gelöscht wird

    Das freut mich, das es möglich ist. Aber wie kann ich das machen?



  • Sagte ich das nicht bereits?

    **
    Du musst in der Funktion nur Zugriff auf den Stream haben, oder den Stream neu öffnen mit der Option das der Inhalt**

    Also, Streamobjekt übergeben (per Referenz) oder halt mit dem Flag std::ios::app öffnen. 🙄



  • Das versteh ich leider nicht ... könntest du nicht ein Beispiel zeigen, wie du das in der Funktion machst und diese dann aufrufst? 😞

    Bin leider noch ein Anfänger ...



  • #include <string>
    #include <fstream>
    
    void TextToTxt( double a, double b, std::ofstream& stream )
    {
    	stream << "Wert fuer a: " << a << '\n';
    	stream << "Wert fuer b: " << b << '\n';
    }
    
    int main()
    {
    	std::ofstream ausgabe( "ausgabe.txt" );
    	ausgabe << "foobar\n";
    
    	double a, b;
    
    	a = b = 0.0;
    
    	for ( int i = 0; i < 4; ++i )
    	{
    		a += 5;
    		b += 10;
    		TextToTxt( a, b, ausgabe );
    	}
    
    	ausgabe.close();
    	std::cin.get();
    }
    


  • In etwa so...:

    void TextToTxt(std::ofstream& ofTxt, double a, double b)
    {
        if(!ofTxt.is_open())
           return; // ggfs. auch mit asssert, oder Du legst die Methode gleich, wie von David_pb vorgeschlagen so aus, dass sie die Datei selbst öffnet.
        ofTxt << "\nWerte für a: " << a << std::endl;
        ofTxt << "\nWerte für b: " << b << std::endl;
    }
    

    Benutzung dann so:

    #include <iostream>
    #include <fstream>
    
    void TextToTxt(std::ofstream&,double,double);
    
    int main()
    {
       using namespace std;
    
       ofstream ofTextFile("ausgabe.txt");
       TextToTxt(ofTextFile, 34.45, 12.987);
    
       // [...]
    
       return (0);
    }
    
    // Definition von TextToTxt dann hier...
    

    Edit: Tüdeldüü...jaja, too-late :p .



  • Danke!!! 🙂

    Jetzt klappt es 🙂 ich werde weiter üben um irgendwann mal genau so gut zu sein!!!



  • Nimm besser std::ostream als Parametertyp für TextToTxt (und überleg dir vielleicht nochmal ob dir nicht ein besserer Bezeichner einfällt).

    CodeFinder schrieb:

    if(!ofTxt.is_open())
           return; // ggfs. auch mit asssert, oder Du legst die Methode gleich, wie von David_pb vorgeschlagen so aus, dass sie die Datei selbst öffnet.
    

    Lass das lieber wie in David_pbs Code und prüfe einfach direkt nach dem öffnen ob alles ok ist:

    string ausgabe_pfad = "ausgabe.txt";
    ofstream ausgabe(ausgabe_pfad.c_str());
    if (!ausgabe) {
      cerr << "Datei \"" << ausgabe_pfad << "\" konnte nicht geoeffnet werden" << endl;
      return EXIT_FAILURE;
    }
    

Anmelden zum Antworten