file speichern und laden
-
Hi,
kann mir einer sagen wie ich was speichern kann ihn einem format von mir. Also man gibt save ein und dann speichert er z.b. den namen im kontostand. und das format heißt z.b .name und am anfang von jedeem start lädt er diese file??
-
Das musst du selbst programmieren.. Nützliche Klassen dazu sind :
std::ifstream und std::ofstream.//speichern { std::ofstream out ( "name.txt" ); out << "irgendein name"; } //laden { std::string name; std::ifstream in ( "name.txt" ); in >> name; }
-
könnte ich dann z.b statt name.txt name.abc nehmen und es geht trotzdem?? Ach ja wenn ich mehrere saachen dann speichere wie bekomm ich das dann hin? dass wenn ich es auslese ich alles einzeln habe in verschiedenen stzrings??
-
Ja, klar geht das.
Du solltest dich einmal mit dem streams beschäftigen. Wenn du nur in Textformat arbeitest, dann ist das alles recht einfach, aber erklären tue ich das jetzt alles nicht.
- Google mal danach, dann solltest du einiges finden.
-
ok. danke für deine hilfe
-
Ich habe mich mal mit der Spielstandsmanipulation beschäftigt (d.h., ich tue es immer noch :D) und hatte einige Schwierigkeiten. Das schwierigste war wohl, die relevanten Offsets (Stellen, in denen bestimmte Werte, wie Stärke oder Anzahl der eigenen Einheiten, geschrieben sind) herauszufiltern. Ich hätte nach Änderungen selbst suchen können und hätte bis heute zu tun gehabt. Ich hatte zwar ein Programm, mit dem man zwei txt-Dateien überprüfen kann, aber das Format des Spielstands war ein sav (Binär, also so gut wie unmöglich zu durchschauen für einen einfachen C++-Programmierer), und hätte ich die Endung von sav in txt geändert, hätte ich einige Werte verloren. (Unicode und Co kommen nicht wirklich klar mit den Werten 0x0 - 0x20)
Deshalb griff ich zu einem einfachen Trick: Ich schrieb ein Programm, dass diese Datei einliesst, den ASCII-Wert der Zeichen (Notepad interpretierte die Werte als Buchstaben) ermittelt und sie in hex-editorhafter Weise in eine txt-Datei schrieb. Vorteil: Ich konnte nicht nur nach Veränderungen, sondern nach ganz bestimmten Werten ausschau halten.
Theoretisch kannst du in jeden Dateityp schreiben, in den du willst. Kennt der PC einen nicht (wie bei mir der Dateityp cpp, bevor ich meinen Compiler draufspielte), wird er sich einfach das Formatieren sparen, dich fragen, mit welchem Programm du die Datei öffnen willst oder, wenn du intelligent genug warst und bereits angeordnet hast, dass bei diesem Dateityp ein Hex-Editor geöffnet werden soll, einfach eben diesen mt deiner Datei öffnen. Falsch machen kannst du bei Dateiendungen nicht viel (und wenn doch, bin ich unschuldig, da ich nicht wüsste, wie)
.
-
das muss man nicht chekchen oder?? Aber wie schaffe ich es das man wenn man dann die gesavte datei doppelklickt dass sich dann mein programm öffnet??
-
Du musst es nicht verstehen, die Quinessenz war sowieso: mit jedem Typen kannst du wenig falsch machen.
Nun, klicke mit rechts (oder, wenn du Linkshänder bist, mit Links) auf die Datei, wähle "Öffnen mit...", suche dir ein PRogramm aus oder erweitere die Liste mt deinem Programm, wähle die Option von wegen, dass der Dateityp immer mit dem vorgegeben Programm geöffnet wird, und schon kannst du mit einem Doppelklick die Datei laden.
-
ok danke.hast du vielleicht nochein link zur der referenz von ofstream denn ich check dat noch net ganz mit demr speichern und ladne
-
Ich habe sie ja in meinem ersten Post verlinkt. Die Referenz da ist recht gut.
-
http://www.willemer.de/informatik/cpp/fileop.htm
http://w3studi.informatik.uni-stuttgart.de/~bischowg/languages/C++/CPPFileHandling.htmlAnsonsten mal googeln.
-
Also bei dem \1:
#include <iostream> using namespace std; int main() { cout << "Hallo"<<endl; ofstream out ( "name.txt" ); out << "irgendein name"; system("PAUSE"); return 0; }
kommt der error:
variable std::ofstream out hast initializer but incomplete type??
-
#include <fstream>
Den Header brauchst du schon.
-
Wie schaffe ich es also cih mache so nen kleines programm bei dem man sein kontoverwalten kann. ich habe scho den anfang aber wie mache es dass man quasi einen log schreibt wann was abegbucht wurde und das dann in einer datei speicher und wenn man dann zum beispiel ein gibt log dann zeigt es die datei and und wenn man zum beispiel was in die log einfügt dann soll es ganz oben stehen mit datum davor und dann was gemacht wurde + oder minus. Einer nen tipp für mich wie man die ganze log in einen stream speichert??
-
Ich würde die Datei in Bereiche aufteilen und dafür Programmstrukturen bereitstellen, z.b. so:
struct Kontoverwaltung { int kontostand; // eventuell float oder double :D vector <string> buchungsvorgang; time_t letzter_buchungsvorgang; };
Ein Buchungsvorgang könnte in einer Zeile stehen, da sind der Fantasie keine Grenzen gesetzt ...
-
Danke aber das mit vector chekce ich net. ich mach das jetzt sso er schreibt einfach immer in die log datei und wenn man logclear eingibt dann wird die log gelöscht. aber 1 sachen weiß ich noch net. und zwar das ganze auslesen egal wie groß und wie viele leers und zeilenumbrüche wie schafft man dies?
-
Ach ja noch was. ich ermittele per abfrage die kontonummer und ich möchte die datei dann so nenen wie die kontonummer ist, aber ich habe es so versucht aber es klappt net
void erstesmal() { cout << "Da das ihr erstes mal ist wo sie dieses Programm" << endl << "ausführen müssen sie ihr Kontoanlegen" << endl; cout << "Bitte geben Sie ihre Kontonummer ein :" << endl; cin >> kontonummer; cout << endl << " Bitte geben Sie nun den Inhaber mit Vor- und Nachname ein :" << endl; cin >> vorname >> nachname; cout << endl << "Bitte geben Sie jetzt noch ihren aktuellen Kontostand ein :" << endl; cin >> kontostand; ofstream out( kontonummer + ".kt"); }
die variablen sind oben definiert also nicht denken dass die net ddefiniert sind
-
Zum Einlesen der Zeilen einer Textdatei in einen Vector findest du hier ein Beispiel:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-246289-and-start-is-0.html
Fürs Verständnis und für kleinere Dateien ( < 5 - 10 MB ) reicht das erste Beispiel von einles0r völlig aus. Schwupp - hast du alle Zeilen der Datei im Vector.
-
und schau mal ich mach ein cin eingabe und das was ehr eingibt so soll auch die datei heißen aber mit meine versuchen bekomm ich nur errors wie schafft man das??
-
Wenn du deinen Versuch zeigen würdest, wäre es hilfreich. Sonst bekommst du u.u. Lösungen, die nicht mit deinem Ansatz kompatibel sind.
Ansonsten würd ich es so machen:
ofstream out; while ( out.is_open() == false ) { string s; cout << "Enter a filename: "; cin >> s; out.open (s.c_str()); if ( out.is_open() == false ) cout << "Can't open " << s << " for writing." << endl; } // Und nun schreibseln ...
-
vllt. noch nen clear rein:
if ( out.is_open() == false ) { cout << "Can't open " << s << " for writing." << endl; out.clear(); // <-- update! }