aus array in *.txt speichern



  • Hab schon einiges gefunden, aber nicht wirklich das Passende glaube ich.
    Ich möchte Werte aus einem array in eine txt-file schreiben.
    Wie funktioniert das? Irgendwiewie mit fstream oder?
    Und vor allem, das hab ich bisher nirgends gelesen. Wo speichert es mir dann die txt-file hin?
    Das geht doch oder? In einer normalen Konsolenanwendung berechne ich dei Werte und lasse sie mir auch anzeigen... Jetzt möchte ich die aber gerne noch in einer extra Datei wiederfinden.



  • Du nimmst dir einen ofstream, übergibst dem Konstruktor den Namen (und Pfad) der gewünschten Datei und schreibst dann per Ausgabe-Operator (>>) deine Daten dort rein. (wenn du eigene Datentypen hast, mußt du den Ausgabe-Operator selber mitliefern)

    PS: Die Datei wird genau dorthin geschrieben wo du angibst. Wenn du keinen Pfad angibst, landet sie im Arbeitsverzeichnis des Programms.



  • Danke schonmal,

    #include <fstream>
    
        ofstream f;
        f.open("test.txt");   // hier fehlt jetzt noch der Pfad?
        f << array[0];        // << weil es "out" geht oder?
        f.close();
    

    Geht das in die richtige Richtung?
    Wie muss der Pfad beispielsweise aussehen? Und wo?

    f.open("test.txt", C:\Users\...);
    


  • std::ofstream os("C:/My/Path/To/My.file");
    os << "RAII ist toll.\n";
    


  • fstream schrieb:

    Wie muss der Pfad beispielsweise aussehen? Und wo?

    f.open("test.txt", C:\Users\...);
    

    Entweder einfach:

    f.open("test.txt");
    

    dann wird die Datei wie CStoll schon erwähnt hat, im Arbeitsverzeichnis des Programms abgelegt, oder aber zB:

    f.open("C:\\Programme\\test.txt");
    

    Ausserdem kannst Du die open - Methode und die close - Methode einsparen:

    ...
    {
        ofstream f("test.txt");
        f << array[0];
    }
    ...
    

    Der Konstruktor öffnet jetzt die Datei, und der Destruktor, der beim Verlassen des Scopes aufgerufen wird, schließt sie wieder, aber prinzipiell geht das natürlich auch mit open/close, bzw. mit open und ohne close, weil auch dann spätestens am Programmende der Destruktor aufgerufen wird.


  • Mod

    314159265358979 schrieb:

    std::ofstream os("C:/My/Path/To/My.file");
    os << "RAII ist toll.\n";
    

    Anstatt solcher Beiträge, die niemandem etwas bringen, da niemand der nicht ohnehin schon weiß, was du damit meinst, es verstehen kann, kannst du auch einfach mal einen allgemein verständlichen Beitrag dazu schreiben und den dann immer verlinken, wenn du es für angebracht hältst.

    Das erhöht deinen Beitrags- und Klugscheißercounter genauso wie bisher, aber vielleicht bringt es anderen Leuten auch etwas.



  • Reg dich mal nicht grundlos auf, der Beitrag ist selbstsprechend, auch wenn damit nicht erklärt wird, was RAII ist. (Hier hast du deinen Link, wenn du schon drauf bestehst.)


  • Mod

    314159265358979 schrieb:

    Reg dich mal nicht grundlos auf, der Beitrag ist selbstsprechend, auch wenn damit nicht erklärt wird, was RAII ist. (Hier hast du deinen Link, wenn du schon drauf bestehst.)

    Selbst mit diesem Link wissen nur Leute die schon längst eingeweiht sind, was du sagen möchtest.



  • Also gut, wenn du das sagst. 😉

    Unter RAII versteht man das Anfordern von Resourcen (Wie Dateien, Netzwerkverbindungen, etc) im Konstruktor des Objekts. Meistens versteht man unter RAII auch das Freigeben der Resourcen im Destruktor.

    {
        std::ofstream os("C:/My/Path/To/My.file"); // Im Konstruktor Datei öffnen
        // Daten in die Datei schreiben
    } // Ende des Scopes. Der Destruktor wird automatisch aufgerufen und die Datei geschlossen.
    

    Zufrieden? 😉


  • Mod

    Jetzt kann der Threadersteller was daraus lernen 👍 . Vorher hat er sich bloß gefragt: "Was will der Spinner?". Denn wegen cout << "RAII ist toll"; Schmeißt niemand Google an. Und selbst wenn, dann findet man nicht unbedingt etwas, wo ein Anfänger den Zusammenhang zu seinen Dateistreams herstellen kann, wenn er denn überhaupt etwas versteht.



  • Ja, vielen Dank.
    Nur krieg ich es doch noch nicht ganz hin. Mal ohne Pfad angeben. Ich benutze Visual Studio 2008. Dann heisst "Arbeitsverzeichnis des Programms" doch das Verzeichnis in Dokumente > Visual Studio 2008 > Projects > und der Ornder des Projekts eben?
    Also hier nochmal ein Codeausschnitt:

    Ich lasse immer noch meine Konsolenausgabe laufen, habe jetzt eben bei den Werten die ich möchte das von oben dazugeschrieben...
    Fehler gibts keine, aber ich bekomme auch keine meinewerte.txt - Datei. Oder ich finde sie auch nur nicht!?

    for (i=0; i<n-1; i++){
    		cout << feld[i] << "\n";
    	}
    	{
    	ofstream f("meinewerte.txt");
    	for (i=0; i<n-1; i++){
    		f << feld[i];
    	}
    	}
    

    Was ist jetzt noch falsch? Oder liegt das nur woanders?



  • Da kann ich lang nachfragen, woran es hakt.
    Irgendwie lag das an meinem Visual Studio. Ich hab Sachen geändert und geändert und im Endeffekt, hats mir immer nur einen alte Code (ohne die Änderungen) gestartet. Warum auch immer!?
    Hab nun einfach ein neues Projekt erstellt und das ganze so übernommen, jetzt bekomm ich auch meine .txt.
    Danke



  • fstream schrieb:

    Da kann ich lang nachfragen, woran es hakt.
    Irgendwie lag das an meinem Visual Studio. Ich hab Sachen geändert und geändert und im Endeffekt, hats mir immer nur einen alte Code (ohne die Änderungen) gestartet. Warum auch immer!?
    Hab nun einfach ein neues Projekt erstellt und das ganze so übernommen, jetzt bekomm ich auch meine .txt.
    Danke

    Das nächste mal, wenn Dich das Visual Studio anlügt, versuche Folgendes:
    Projekt schleißen.
    Debug-Verzeichnis löschen.
    Release-Verzeichnis löschen.
    Die *.ncb löschen. //Die ist kaputtgegangen.
    Projekt wieder öffnen.


Log in to reply