In Datei speichern und rekursiver aufruf ?



  • Hallo,
    hab eine verkettete Liste in der Namen stehen. Diese Liste möchte ich jetzt bei der Ausgabe in eine Datei speichern. Mach das ganze so:

    ofstream datei ("test.txt");
    datei<<name;
    datei.close();

    Das Problem ist das ich in meiner Ausgabe Funktion die Liste REKURSIV ausgebe. Also erst wird die Wurzel ausgegeben und dann ruft sich die Funktion wieder auf mit dem NEXT Element. Durch den Rekursiven Aufruf wird die test.txt Datei immer wieder neu erstellt so das im endeffekt immer nur 1 Name darin steht (nämlich der letzte). Wie kann ich das Problem lösen bzw. gibts ne Möglichkeit zu checken ob die Datei schon existiert damit keine neue angelegt wird ?

    Grüße Cassis.



  • Gib deiner rekursiven funktion einen zusätzlichen Parameter "ostream& out" und da schreibst du dann rein. Die Datei wird dann ausseerhalb der Funktion geöffnet und du übergibst der Funktion den stream als Argument.

    Ist sowieso viel praktischer. Da kannst du dann zum testen zB. auch mal cout übergeben, statt die Datei.



  • @DrGreenthumb

    Ehrlich gesagt versteh ich Deinen Tipp nicht so ganz...! Kannst du das näher erläutern oder ein Beispiel geben ? Sorry ich hab en ganzen C++ Kram noch nicht so gut drauf.



  • ich meine das so:

    // deine rekursive funktion
    void funktion(..., ostream& out)
    {
      ...
      out << name;
      ...
      funktion(..., out);
    }
    
    // und die datei muss nur einmal vor dem aufruf geöffnet werden
    ofstream datei(...);
    funktion(..., datei);
    


  • KLASSE FUNKTIONIERT !!! Danke !

    Nur noch ein kleines Problem, die Namen werden in der Textdatei alle hintereinander gehängt. Wie kann ich die mit einem RETURN trennen ?



  • ein RETURN hinterherschreiben 🙂

    out << name << '\n';



  • Hab hier meinen Experten gefunden, deshalb noch 2 weitere Fragen:

    1. Das mit dem Return funzt auch, blos ist in der Textdatei die erste Zeile eine Leerzeile, mmmm frag mich warum er mit einem Return beginnt. Danach arbeitet alles bestens.

    2. Ich möchte eine Möglichkeit einfügen die Textdatei aus den Programm heraus LEER zu machen, dabei soll aber die Datei erhalten bleiben. Was gibts da für Optionen ?

    Danke Dir !



  • Cassis schrieb:

    1. Das mit dem Return funzt auch, blos ist in der Textdatei die erste Zeile eine Leerzeile, mmmm frag mich warum er mit einem Return beginnt. Danach arbeitet alles bestens.

    da schreibst du wohl einmal nen leeren namen in die datei

    1. Ich möchte eine Möglichkeit einfügen die Textdatei aus den Programm heraus LEER zu machen, dabei soll aber die Datei erhalten bleiben. Was gibts da für Optionen ?

    das ist doch dein Problem ganz am Anfang gewesen 😉

    ofstream datei(...); datei.close();



  • OK OK....einen hab ich noch....!

    Wie kann ich checken ob die Datei leer ist ? Hab ne Funktion geschrieben die die vorhandenen Namen aus der Textdatei einliest beim Programmstart. Ist die Textdatei aber noch leer liest er quasi einen leeren Datensatz ein. Daher kommt auch der leere Datensatz beim Speichern. Er soll also am Anfang erstma checken steht überhaupt was in der Datei drin ?


Anmelden zum Antworten