Highscore in txt Datei abspeichern

rapham

Grünschnabel
Hallo Zusammen

Bei meine Progrämmchen möchte ich gern den Higscore in eine Text Datei abspeichern. Das Problem ist momentan das ich den Namen des Highscore brechers nicht in die txt datei hinterlegen kann. Wie kann ich den Namen in die Text Datei schreiben?
Mit den Punkten ist das momentan kein Problem.

Unten seht ihr meine Code. Eine eurer Fragen wird sicher sein, warum wandelst du die HighscoreDate1 in char um.
Weil so wies aussieht ich keine Strings direkt in die Text Datei schreiben kann. Und mein Namen im String Format vorliegt.

Momentan arbeite ich mit dem Borland C++ Builder 6.0
PHP:
    ofstream schreiben;
    schreiben.open("Highscore.txt", ios::out);
    schreiben << ((char*) &HighscoreData1);
    schreiben << "\n" + (highscore);
    schreiben.close();

Falls ich (wir ) es schaffen sollten, wie kann ich das dann wieder auslesen?
Ich danke schon im Voraus
 
Was hat denn HighscoreData1 für einen Typ? Grundsätzlich gilt: Casten nur um Compilerfehler zu verhindern ist immer der falsche Weg.
 
Wie kann ich den Namen in die Text Datei schreiben?
Der Name wird ja vermutlich als string abgelegt sein (std:string oder char[]). Den kannst direkt an den Stream verfüttern.

Übrigens, wenn du eh schon einen Stream befüllst, sind Stringadditionen eigentlich unötig. Schreibe daher besser:
Code:
schreiben << endl << highscore

Du kannst übrigens auch alles in einem Rutsch schreiben, da die Streamoperatoren (<<) mehrfach nacheinander angewendet werden können, siehe auch mein vorheriges kurzes Beispiel.

wie kann ich das dann wieder auslesen?
Dafür nimmst du dann den ifstream und schreibst das im Prinzip fast genauso hin, wie beim Speichern. Der Streamoperator kehrt sich um (>>) und schreibt die Daten in die entsprechenden Variablen.

Gruß
MCoder
 
Der Name wird ja vermutlich als string abgelegt sein (std:string oder char[]).
Nicht bei Borland... da handelt es sich vermutlich um einen VCL String oder sowas.

Versuchs mal mit
C++:
cout << HighscoreData1.c_str() << ...
Dafür nimmst du dann den ifstream und schreibst das im Prinzip fast genauso hin, wie beim Speichern. Der Streamoperator kehrt sich um (>>) und schreibt die Daten in die entsprechenden Variablen.
Falls Leerzeichen in den Variablen waren könnte es allerdings sein, dass das nicht ganz so einfach funktioniert, da müßtest du dann z.B. getline verwenden.

Gruß
 
Name ist als String deklariert


cout << HighscoreData1.c_str() << ...
Das habe ich mal ausprobiert. Wenn ich jetzt die Text Datei öffne sehe ich nur ein paar komische Zeichen ist das korrekt?
Sollte da jetzt nicht mein String ausgeschrieben werden? Mit dem Name Punkte usw. ?
 
Name ist als String deklariert
Wobei String scheinbar einfach ein Alias für AnsiString ist...
Das habe ich mal ausprobiert. Wenn ich jetzt die Text Datei öffne sehe ich nur ein paar komische Zeichen ist das korrekt?
Was sollte denn drin stehen?

Was steht denn drin? (am besten Datei mal anhängen).
Sollte da jetzt nicht mein String ausgeschrieben werden? Mit dem Name Punkte usw. ?
Eigentlich schon.

Kannst du mal ein vollständiges Minimalbeispiel erstellen, wo man sieht was du speicherst und wie genau dein Code aussieht?

Gruß
 
Code:
    AnsiString Name;
    String HighscoreData1;


    Name = Buchstabe;               // Buchstabe ist der Wert welcher eingelsen wird
    HighscoreData1 = "1:\t" + String(Name) +"\t"+ String(highscore);
    L_Highscore1 -> Caption = HighscoreData1;

    if(HighscoreData1 == "")
    {
        L_Highscore1 -> Caption = "1:\t";
    }
    else
    {
        L_Highscore1 -> Caption = HighscoreData1;
    }


    ofstream schreiben;
    schreiben.open("Highscore.txt", ios::out);
    schreiben << ((char*) &HighscoreData1);
    schreiben << "\n" + (highscore);
    schreiben.close();

    schreiben << "\n 1d \n";
    cout << HighscoreData1.c_str() <<
    //schreiben << end1 << HighscoreData1;
    //schreiben << (char*) &HighscoreData1;
    schreiben << "\n 1d \n";
    schreiben << (char*) &Name;
     //Punkte werden aufgeschrieben

    schreiben <<"\n Hallo";
    schreiben.close();

Als Name habe ich Raphael eingegeben und als highscore hatte ich 10 Punkte
 

Anhänge

@badday
Du hast Recht da habe ich nicht so viel studiert.

Habe es momentan soweit bekommen das ich jetzt abspeichern kann. Ich wandle den AnsiString in einen string um und dann funktionierts.


Code:
    OkButtonPressed = true;
    string Name;
    //AnsiString HighscoreData1Ansi;



Ich danke für eure bisherige Hilfe





    char* Buchstabe = new char[ Edit1->Text.Length() + 1 ];    // umwandlung von AnsiString (=String) nach string
    strcpy( Buchstabe, Edit1->Text.c_str() );

    Name = Buchstabe;

// Speichern in Datei

    HighscoreData1 = "1:  " + string(Name);

    //L_Highscore1 -> Caption = HighscoreData1;


    ofstream schreiben;
    schreiben.open("Highscore.txt"); // Datei wir zur EXE geschrieben
    schreiben <<  HighscoreData1 << "\n" <<highscore;

    schreiben.close();
 
Hallo zusammen

Wenn ich das wieder auslesen möchte. Wie kann ich dann die Zahl (highscore) wieder als int auslesen, beziehungsweise konvertieren
 
Zurück