In datei Spiechern

Diskussionen zu Tutorials, Änderungs- und Erweiterungswünsche
Antworten
Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

In datei Spiechern

Beitrag von Empire » Di Mai 12, 2009 6:12 pm

Kenn jemand ein Gutes Tutoriel zum Thema zB. Listen In dateien speichern?

mfg
Empire

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: In datei Spiechern

Beitrag von Kerli » Di Mai 12, 2009 6:35 pm

Ein Tutorial das das direkt behandelt kenne ich keines, aber das sollte eigentlich auch mit unserem Tutorial nicht so schwer sein...

Zuerst öffnest du mit fopen() eine Datei zum Schreiben. Dann gehst du in einer Schleife alle Elemente der Liste durch und schreibst sie mit fwrite() in die Datei. Dann brauchst du nur mehr mit fclose() die Datei wieder schließen und du bist fertig.

Zum Laden machst du das eigentlich fast genau gleich. Du öffnest wieder die Datei und dann ließt du der Reihe nach mit fread() die einzelnen Strukturen der Liste heraus. Dabei musst du nur beachten das die Zeiger auf die benachbarten Elemente in der Liste mit sehr hoher Wahrscheinlichkeit nicht mehr gültig sind weshalb du diese noch aktualisieren musst.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: In datei Spiechern

Beitrag von Jside » Mi Mai 13, 2009 7:55 am

Du kannst z.b. folgendes:

char *test[2] = { "Hallo","Hello"};

folgendermaßen in eine Datei schrieben(aber erst mit fopen öffnen...)

Code: Alles auswählen

fprintf(datei,"%s\n%s",test[0], test[1]);
dann sieht der Inhalt der Datei folgendermaßen aus:
Hallo
Hello
Das kannst du jetzt z.b. via fgets welches immer eine Zeile einließt z.b. so wieder einlesen:

Code: Alles auswählen

fgets(test[0],255,datei);
fgets(test[1],255,datei);
Dann ist es wieder wie oben. 255 ist die Begrenzung, der einzulesenden Zeichen(pro Zeile), kannst du natürlich auch höher machen, sobald fgets an einen Zeilenumbruch(\n)(-oder ans EOF) kommt,(was indemfall nach 5 Zeichen passiert) stoppt es, daher du kannst die Zahl der Einzulesenden Zeichen auch sehr hoch stellen....

...so mach ich das zumindest immer ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: In datei Spiechern

Beitrag von Xin » Do Mai 14, 2009 8:27 am

Empire hat geschrieben:Kenn jemand ein Gutes Tutoriel zum Thema zB. Listen In dateien speichern?
Du brauchst eine Funktion, die eine Node der Liste "serialisiert".
Das bedeutet, dass alle relevanten Informationen hintereinenander gesetzt werden. Dieser Funktion übergibst Du einen Stream, den Du von fopen() bekommst (In C++ entsprechend mit iostreams).

Als nächstes brauchst Du eine Funktion, die einen serialisierte Node wieder in eine Echte verwandelt. Auch diese bekommt einen Stream und liest aus dem Stream die erforderlichen Daten aus, erstellt daraus die Node und gibt sie zurück.

Deine Liste muss anschließend nur den Stream öffnen und ihn der Reihe nach den Nodes durchreichen, bzw. beim Lesen solange Nodes erzeugen, bis der Stream nichts mehr zum Lesen anbietet.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten