 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 09.12.2002, 15:57 Titel: Speichern, immer wieder speichern... |
|
|
Gleich zum Problem, oder mehr zur Frage: Man kann ja Integervariablen oder Variablen überhaupt in einen Stringschreiben, den String in ne Datei schreiben, den String auslesen, die Variable auslesen und den Wert der Variablen zuteilen.
Code: |
int Zahl = 0;
Datei = fopen("c:\\test.txt","w");
fprintf(Datei,"%d",Zahl);
fclose(Datei);
Datei = fopen("c:\\test.txt","r");
char Puffer[256];
while(!feof(Datei))
{
fgets(Puffer,255,Datei);
}
Zahl = atoi(Puffer);
|
oder so in der Art zumindest.
Wenn ich jetzt ne selbst geschriebene Struktur habe, wie muss ich sie abspeichern, muss ich nen großen string haben in den ich dann jeden Member der struktur reinschreibe, den string speichern, auslesen und dann per "strtok" jeden Member wieder auslesen, oder gibts da nen einfacheren Weg?
Cu,
VH |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 09.12.2002, 16:22 Titel: |
|
|
Die Menschen sahen flehend zum Himmel und Gott schenkte ihnen die Unions
Also: Ein Struct hat eine Bestimmte größe in Bytes. Läßt sich in der Regel mit sizeof(Struct) rausbekommen.
Eine Union ist ein Datentyp, der mehrere Variablen auf den gleichen Speicherbereich zugreifen lässt.
Richtest du also eine Union ein, mit einer Variable als Struct und einer 2. Variable als String ist dein Problem gelöst. Den String kannst du dann als Bytefeld in eine Datei schreiben. Achte darauf, daß ein Struct sehr wahrscheinlich ein Null-Byte irgendwo verwendet, so das man nicht einfach nur den String in die Datei schreibt, sondern die genaue Anzahl an Bytes passend zur Größe des Structes.
Im Übrigen braucht man nur die Anfangsadresse des Structes zu wissen (&-Operator) und kann über Sizeof(Struct) den Struct als solches in eine Datei schreiben...
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 09.12.2002, 19:02 Titel: |
|
|
Aha, ich versteh zum Großteil was du meinst, könntest du mal ein Codebeispiel mit speichern und auslesen dieser Struktur bringen?
Code: |
struct sBeispiel
{
int iBeispielVariable;
bool bBeispielVariable2;
}
sBeispiel BeispielStruktur;
BeispielStruktur.iBeispielVariable = 12345;
BeispielStruktur.bBeispielVariable2 = true;
|
Also mit der Struktur ein Codebeispiel mit speichern und laden wär cool.
Danke! |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 09.12.2002, 20:37 Titel: |
|
|
Code: |
struct sTest
{
int bla;
float meep;
char erf[64];
};
...
sTest foo;
// foo füllen
FILE * pOut = fopen("test.dat", "wb");
fwrite(&foo, sizeof(sTest), 1, pOut);
fclose(pOut);
|
Laden geht genauso, nur mit fread() :) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 11.12.2002, 19:10 Titel: |
|
|
Hi!
Danke noch mal für die hilfe, aber noch 2 Fragen dazu:
1. @Hazel:
Du hast
Code: |
FILE * pOut = fopen("test.dat", "wb");
|
Das geschrieben, ist das "wb" ein schreibfehler?
2. Es gibt ja den parameter Count, mit dem man, wenn ich mich nicht irre, mehrere Variablen in ein Datei schreiben kann. Dazu: Wie funktioniert das genau (auch mit auslesen) und kann man damit auch unterschiedliche Strukturtypen speichern? |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 11.12.2002, 22:23 Titel: |
|
|
Nein, der Parameter bedeutet Write Binary. Also wird die Datei mit dem Befehl Zum lesen und schreiben neu erstellt. Ist sie schon vorhanden wird sie gelert.
Mit deinem Parameter "Count" kann man mehrere Blöcke gleichzeitig schreiben. Allerdings muß die Startadresse der ersten Variable auch für alle weiteren Blöcke gelten (incl. Abstand)
Es funktioniert also nur bei einem statischen Array.
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 12.12.2002, 11:46 Titel: |
|
|
Also so?
Code: |
struct sBeispiel
{
int iBeispielVariable;
bool bBeispielVariable2;
}
sBeispiel Feld[10];
//File und so zeugs...
fwrite(&Feld, sizeof(sBeispiel), 10, File);
|
|
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 12.12.2002, 12:15 Titel: |
|
|
Kleiner Fehler. Es muss
Code: |
fwrite(Feld, sizeof(sBeispiel), 10, File);
|
heißen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|