Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

1

07.02.2012, 22:28

Speichern und Laden einer Datei

Hallo Leute,

Ich hab ein Problem mit dem Lesen einer Datei.
Also ich brauch eine Datei in der ich mehrere Werte speichere: Strings und Zahlen

Geht das überhaupt, dass ich in derselben Datei Zahlen UND Strings richtig speichern kann?
Ich hab mich mit fstream etwas auseinandergesetzt und schaff es auch ohne große Probleme alles in eine Textdatei zu speichern.

Zahlen als Text zu speichern ist ja kein Problem, aber aus Text wieder eine Zahl machen geht ja nicht, weil es ja dann keine Zahl mehr ist sondern ein String (wenn ich das richtig verstanden habe), drum denk ich mal geht eine Textdatei nicht?
Hab öfters gelesen, dass man die Zahlen binär speichern und laden muss, damit das funktioniert. (Aber das kann man ja nicht in eine Textdatei speichern? :crazy: )

Außerdem hab ich nirgens wirklich gefunden, wie man zum Beispiel NUR in der 3. Zeile das 4. Wort einem string zuweist.
Nur, dass man es so speichern kann mit Leerzeichen oder Sonderzeichen, dann beim lesen 3 mal dieses Zeichen "überspringt" und dann erst liest.

Ich hoff ihr wisst was ich mein und könnt mir weiterhelfen.
MfG Geheim!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

07.02.2012, 23:18

Schau dir mal ganz genau an was du mit dem >> operator so anstellen kannst ;)

3

07.02.2012, 23:24

Ich persönlich finde die Boardmittel von C++ für Dateihandling nicht so gelungen, früher oder später sollte man auf Highlevel Zusatzbibliotheken ausweichen.
Zum Beispiel für XML Dateien:
http://code.google.com/p/ticpp/ oder
http://rapidxml.sourceforge.net/

Ansonsten musst du dir klar werden, ob du Textdateien oder Binärdateien schreiben willst. In beiden Fällen ist es kniffelig z.B. festzustellen, wo genau ein String aufhört, du wirst also vermutlich die Länge mitspeichern wollen. XML Dateien sind diesbezüglich sehr viel angenehmer, aber natürlich musst du dort auch die entsprechende Einarbeitungszeit einplanen.
Lieber dumm fragen, als dumm bleiben!

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

4

08.02.2012, 10:41


Zahlen als Text zu speichern ist ja kein Problem, aber aus Text wieder eine Zahl machen geht ja nicht, weil es ja dann keine Zahl mehr ist sondern ein String (wenn ich das richtig verstanden habe), drum denk ich mal geht eine Textdatei nicht?
Hab öfters gelesen, dass man die Zahlen binär speichern und laden muss, damit das funktioniert. (Aber das kann man ja nicht in eine Textdatei speichern? :crazy: )

Aus einem String lässt sich auch wieder eine Zahl machen. Das geht problemlos mit den vorhandenen Funktionen in C++ z.B atoi()

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

08.02.2012, 12:04

Verwend doch einfach den >> operator ...

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

6

08.02.2012, 14:11

Danke für die Antworten!

@dot:
Also mit dem >> Operator funktionierts zwar, aber bei mir nur 1 mal (hängt aber nicht mit dem Operator zusammen sondern weil ich nicht weiß wie ich mehrere Daten wieder richtig auslese)

Woher weiß eigentlich der >> Operator, dass in der .txt Datei zB. 145 ein integer ist? Wird das nicht als char bzW. string gespeichert?

@Jonathan_Klein:
XML ist sicher was feines, sieht mir aber etwas kompliziert aus und ich brauch ja nicht viel was ich speichern will, das muss ja auch mit fstream gehen, aber danke für die Alternative ;) Werd ich vielleicht mal später darauf zurückgreifen^^

Ich finde die Umsetzung um Daten zu speichern sehr umständlich und unnötig kompliziert, vielleicht lieg ich ja falsch, aber es wär doch viel praktischer, wenn man zB. sagen kann Filename.save(Age_Man)=16; und dann unsigned int Age = Filename.load(Age_Man); Wär doch sehr angenehm;)

Wisst ihr einen Trick wie man mehrere Daten in der selben Datei auseinanderhalten kann und sie jederzeit wieder auslesen kann? Zum Beispiel einen Spielstand: Man speichert sich die Punkte, den Namen des Spielers, usw... in eine Save.txt Datei oder so und kann dann beim öffnen alles Laden und zuweisen.

MfG Geheim!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

08.02.2012, 14:15

Der >> operator schaut an was rechts von ihm steht. Wenn dort ein int steht, dann liest er eben einen int ein. Natürlich kommt aus der Datei nur Text, aber der >> operator wandelt den Text eben in einen int um ;)

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

8

08.02.2012, 14:18

Das ist doch mal was feines ;) Dann hat sich ein Problem schonmal in Luft aufgelöst, danke dir :thumbsup:

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

9

08.02.2012, 16:39

Hi, ich bins nochmal^^

Ich hab mein Problem jetzt mithilfe von euren Antworten und etwas rumprobieren gelöst!
Es geht so wie ich es will, ohne irgendwelche komischen Fehler oder sonst was.
Für die, die ein ähnliches Problem bis jetzt nicht lösen konnten, meine Lösung für das speichern und laden von mehreren Daten aus einer Datei:

Für das speichern einfach alles mit dem tollen << Operator reinquetschen ;) UND nach jedem (was ihr später wieder laden wollt) ein Leerzeichen, Tabulator oder Enter machen.

Beim laden lass ich einen int Wert die leerzeichen und so zählen und beim richtigen wert wieder mit dem tollen >> Operator einen string zuweisen.
Wenn ihr eine Zahl gespeichert habt, dann könnt ihr mit atoi(string.c_str()) den string in eine zahl umwandeln (danke dafür an Saik0)

Ich weiß nicht, ob die Lösung gut ist, aber sie erfüllt ihren Zweck!
Falls ihr Verbesserungs-,Verschönerungsvorschläge habt, lasst es mich bitte wissen, weil ich es auch gern richtig verstehen und anwenden will!

MfG Geheim!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

08.02.2012, 16:42

Genau so ist's gedacht ;)
Leerzeichen würd übrigens reichen. Der >> operator interpretiert per default jeden Whitespace als Trennzeichen.

Werbeanzeige