JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6a0a9f43ce9544138a31b722f0b5dc60Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Speichern, immer wieder speichern...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 09.12.2002, 16:57    Titel: Speichern, immer wieder speichern... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 09.12.2002, 17:22    Titel: Antworten mit Zitat

Die Menschen sahen flehend zum Himmel und Gott schenkte ihnen die Unions Wink
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 09.12.2002, 20:02    Titel: Antworten mit Zitat

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. Cool
Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 09.12.2002, 21:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 11.12.2002, 20:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 11.12.2002, 23:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 12.12.2002, 12:46    Titel: Antworten mit Zitat

Also so?
Code:

struct sBeispiel
{
int iBeispielVariable;
bool bBeispielVariable2;
}

sBeispiel Feld[10];

//File und so zeugs...
fwrite(&Feld, sizeof(sBeispiel), 10, File);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 12.12.2002, 13:15    Titel: Antworten mit Zitat

Kleiner Fehler. Es muss

Code:

fwrite(Feld, sizeof(sBeispiel), 10, File);


heißen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum