Aktuelle Zeit: 08.05.2024, 16:04

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: In Datei schreiben
BeitragVerfasst: 29.09.2009, 22:58 
Offline

Registriert: 29.09.2009, 22:45
Beiträge: 5
Da dies mein erster Theard in diesen Forum ist, kurz was zu meiner Person. Ich bin Schüler und beschäftige mich viel mit Pc's. Seit kurzen befasse ich mich mit Irrlicht um ein kleines Game mit meiner Freundin zusammen zu erstellen. Da ich das programmieren übernehme und sie das Designern, bin ich dabei einen Editor zu erstellen, da habe ich nun folgende Frage.

Ich möchte in eine normale Textdatei eine variable speichern. Der Typ ist wchar_t [20]. Mein Problem liegt nun darin, dass in die Datei nur der erste Buchstabe des Strings gespeichert wird. Ich habe hier mal meine Funktion, in der wird erst die Länge einer Variable angegeben und dann die Variable selbst.

Code:
void saveObajkteSonstige()
{
   wchar_t name[MAX_OBJEKTE_STRING];
   wchar_t mesh[MAX_OBJEKTE_STRING];
   wchar_t textur[MAX_OBJEKTE_STRING];
   char czeichen[3];
   int izeichen;

   char cname[MAX_OBJEKTE_STRING];
   strcpy(cname,"loling");

   cSonstige.setPointerStart();
   io::IWriteFile* write = device->getFileSystem()->createAndWriteFile("test.txt");

   for(int i=0;i<cSonstige.getMaxEntry();i++)
   {
      cSonstige.getNextEntry(name,mesh,textur);

      strcpy(czeichen,"");
      izeichen = wcslen(name);
      if(izeichen < 10)
      {
         sprintf(czeichen, "0%d", izeichen);
      }
      else
      {
         sprintf(czeichen, "%d", izeichen);
      }
      write->write(czeichen,2);
      write->write(name,izeichen);

      strcpy(czeichen,"");
      izeichen = wcslen(mesh);
      if(izeichen < 10)
      {
         sprintf(czeichen, "0%d", izeichen);
      }
      else
      {
         sprintf(czeichen, "%d", izeichen);
      }
      write->write(czeichen,2);
      write->write(mesh,izeichen);

      strcpy(czeichen,"");
      izeichen = wcslen(textur);
      if(izeichen < 10)
      {
         sprintf(czeichen, "0%d", izeichen);
      }
      else
      {
         sprintf(czeichen, "%d", izeichen);
      }
      write->write(czeichen,2);
      write->write(textur,izeichen);
   }
}


Hier ist zum Verständnis auch mal der Code zum auslesen.

Code:
void loadObjekteSonstige()
{
   for(int i=0;i<2;i++)
   {
      wchar_t name[MAX_OBJEKTE_STRING];
      wchar_t mesh[MAX_OBJEKTE_STRING];
      wchar_t textur[MAX_OBJEKTE_STRING];
      char czeichen[2];
      int izeichen;

      io::IReadFile* read = device->getFileSystem()->createAndOpenFile("test.txt");
      read->read(czeichen,2);
      izeichen = atoi(czeichen);
      read->read(name,izeichen);

      read->read(czeichen,2);
      izeichen = atoi(czeichen);
      read->read(mesh,izeichen);

      read->read(czeichen,2);
      izeichen = atoi(czeichen);
      read->read(textur,izeichen);


      cSonstige.addEntry(name,mesh,textur);
   }
}



Ich hoffe, ihr könnt mir helfen. Ich meine dies lässt sich auch mit Irr:XML erledigen, jedoch bin ich mir da nicht so sicher und ich habe irgendwie kein Tutorial gefunden, in dem es ausreichend und verständlich erklärt wurde.

Roba


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 30.09.2009, 07:01 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Der Code sieht erstmal vom Prinzip her richtig aus.
Was steht den jeweils in izeichen drin?

Noch ein kleiner verbesserungsvorschlag:
Du musst die Länge nicht erst in ein char speichern und sie dann im klartext in die Datei schreiben. Du kannst auch einfach direkt den int in die Datei schreiben und wieder lesen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 30.09.2009, 18:31 
Offline

Registriert: 29.09.2009, 22:45
Beiträge: 5
In izeichen, steht jeweils die Länge des nachfolgendes Zeichens, das Prinzip wäre z.B. 03Hal05Hallo10Halloduda!

Das Problem jedoch ist, dass nur ein Zeichen in die Datei gespeichert wird.

Roba


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 30.09.2009, 18:38 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Mir ist schon klar, wofür izeichen da ist. Aber was sagt denn der Debugger was drin steht ?

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 01.10.2009, 16:58 
Offline

Registriert: 29.09.2009, 22:45
Beiträge: 5
In izeichen steht 6
In czeichen, jedoch 06[4 kryptische Zeichen]

Aber da in izeichen alles ok ist, müsste es doch klappen, da ich ja nur damit arbeite.

Roba

P.s. Oder kann man so was auch leicht mit irr::XML verwirklichen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 01.10.2009, 17:17 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Schreib doch einfach mal direkt izeichen in die Datei.
Code:
write->write( &izeichen, sizeof(int) );


Zum Lesen dann das
Code:
int izeichen = 0;
read->read( &izeichen, sizeof(int) );


Diese "kryptischen Zeichen" dürften nämlich nichts anderes sein, als eine nicht abgeschlossene Zeichenkette.

Natürlich ginge das auch mit xml. Code dafür hab ich jetzt nicht parat, aber mit den tutorials von IrrXml solltest du da ausreichend bedient sein.
Aber je nachdem was du da speichern willst, würde auch INI reichen, bzw. die einzelenen Daten durch vorher definiert Zeichen (z.b. zeilenumbruch) trennen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 02.10.2009, 06:24 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Mit irrXML sollte das recht gut gehen. Aber ich muss Sylence Recht geben ... wenn es sich um einfache Daten handelt, dann bist du mit ini-Files vielleicht besser aufgehoben. Die sind vor Allem einfacher in der Handhabung.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: In Datei schreiben
BeitragVerfasst: 02.10.2009, 20:04 
Offline

Registriert: 29.09.2009, 22:45
Beiträge: 5
Also in der Datei werden Namen von 3D Objekten und den Pfaden zu der Textur und der Mesh gespeichert.
Sprich:

Name=Female Mesh=media/female.md2 Textur=media/female.jpg

Nacher vielleicht noch mehr Sachen, jedoch weiß ich nicht wie ich das mit irr::Xml durch eine Schleife geben soll, iwi wurde ich da nicht ganz schlau oder ich hatte nur unglückliche Tutorials.

Roba


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de