schreiben mit fstream



  • hallo erstmla,

    ich habe folgendes Problem: und zwar erstelle ich in einer Funktion eine Datei (Textdatei). In diese werden einige Zeilen Text geschrieben bzw. Zeilen nach der Fomr: "groeße wert \n". Jetzt möchte ich in einer anderen Funktion den Wert verändern. Leider hab ich keine Ahnung wie ich das machen könnte.

    Danke schonmal im voraus


  • Administrator

    Welchen Wert verändern? Zeig mal ein bisschen Code, so dass man auch versteht, was du willst.

    Grüssli



  • ok

    wxString Profil_erstellen()
    {
        wxFile Test("Test", wxFile::read_write);
        bool dateiexistenz=true;
        int zahl=1;
        while (dateiexistenz)
        {
            wxString zahl_string; zahl_string<<zahl;
            if (Test.Exists(zahl_string))
            {
                dateiexistenz=true;
            }
            zahl++;
        }
        wxString name_string; name_string<<zahl;
        std::fstream profildatei(name_string, std::ios_base::out);
        profildatei<<"Name:     \n";
        profildatei<<"Alter:    \n";
        profildatei<<"Größe:    \n";
        profildatei<<"Gewicht:  \n";
        profildatei<<"Passwort: \n";
        return zahl_string;
    }
    
    void Profildaten_schreiben_speichern_1(wxString* name, wxString* alter, wxString* groese, wxString* gewicht, wxString* passwort,wxString zahl_string)
    {
        std::fstream profildatei();
        profildatei.open(zahl_string, std::ios_base::out);
    

  • Administrator

    Da kommt wohl wirklich kein Edit mehr ... Dann frag ich halt nochmals:
    Welchen Wert verändern?
    Und du sollst das am besten am Code erläutern, was du machen willst. Nicht einfach nur ein Codestück rein, dass nützt doch nix.

    Grüssli



  • martin.bens schrieb:

    bool dateiexistenz=true;
        int zahl=1;
        while (dateiexistenz)
        {
            wxString zahl_string; zahl_string<<zahl;
            if (Test.Exists(zahl_string))
            {
                dateiexistenz=true;
            }
            zahl++;
        }
    

    Aus der while-Schleife kommst Du so ja schon mal nicht raus......



  • achso ja
    das mit der while schleife hab ich schon geändert
    und zwar möchte ich:

    wxString name_string; name_string<<zahl;
        std::fstream profildatei(name_string, std::ios_base::out);
        profildatei<<"Name:     \n";
        profildatei<<"Alter:    \n";
        profildatei<<"Größe:    \n";
        profildatei<<"Gewicht:  \n";
        profildatei<<"Passwort: \n";
    

    hier schreibe ich doch die Zeilen in die txt Datei

    ich möchte dann, die Zeile durch eine solche Zeile ersetzen:

    profildatei<<"Name:  " + name +  "\n";
    

    name ist hierbei ein wxString

    spricht ich will also eine Zeile in einer .txt Datei durch einen wxString ersetzen


  • Administrator

    Wieso schreibst du die Werte nicht dann in das File, wenn du auch das andere Zeug reinschreibst? Etwas in einem Textfile zu ersetzen ist äusserst mühsam und aufwendig.

    Um in einem Textfile was zu verändern, musst du es zuerst einlesen, wahrscheinlich auch noch parsen, die entsprechende Stelle finden, diese ersetzen, neue Stellen finden und ersetzen falls notwendig, und am Ende alles wieder zusammenfügen und zurück in das Textfile schreiben.

    Grüssli



  • mhh ok das klingt schwierig
    naja....was ich machen will ist folegndes:
    ich will mit einem Programm ein Profil erstellen, indem bestimmte Werte eingetragen werden. Dieses soll gespeichert werden und die Werte sollen wieder geladen werden können. Mein Problem ist, dass nicht alle Werte miit einmal in der GUI abgefragt werden. Daher muss ich garantieren, dass die Werte in der richtigen Reihenfolge sind und außerdem, dass wenn ich diese Werte verändern will, diese auch verändert werden (also die alten Werte ersetzen) und nicht einfach nur drangehangen werden.
    vielleich hätte noch jemand einen Vorschlag wie man das anders machen könnte.

    Danke schonmal im voraus


  • Administrator

    class Profile
    {
      // Data
    };
    
    void write_profile(std::string const& path, Profile const& profile)
    {
      // ... schreiben
    }
    
    Profile read_profile(std::string const& path)
    {
      // ... lesen und das gelesene Profil zurückgeben.
    }
    

    Die Änderungen führst du im Profile Objekt durch, welches du dir erstellst. Erst wenn alle Änderungen durchgeführt wurden, speicherst du die Sache in das File. So machen es auch die meisten Anwendungen. Ein File wird geöffnet, gelesen und in entsprechende Strukturen im Hauptspeicher verpackt. Diese Strukturen werden gelesen oder angepasst. Wenn die entsprechenden Aktionen vorbei sind, wird aus den Strukturen im Hauptspeicher wieder ein File erzeugt. Also:
    Lesen -> Arbeiten -> Speichern

    Grüssli



  • sprich ich soll ne neue Klasse machen
    das ist ja echt klasse...naja ok
    ich bräuchte ein kleinen wenig Hilfe denn mit OOP bin ich noch nicht so ganz bewandert und das Programm für dass ich diese Anwendungen brauche muss leider bis Montag nächste Woche fertig sein und die Note die ich darauf bekommen wiegt ziemlich schwer und deswegen hab ich nen ziemlichen Druck.
    Ich weiß, dass die meisten hier keine Zeit für so etwas haben werden aber wäre voll cool wenn sich jemand melden würde der mir vllt. über ICQ jetz die Woche sozusagen mir Rat und Tat zur Seite stehen könnte und mir ein wenig unter die Arme greifen könnte.

    Danke das wäre echt richtig cool wenn sich jemand findet.


Log in to reply