ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4419845
Jetzt (Chat):
22 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Sourcecode-Probleme
C++ und streams machen mir zu schaffen
Normal
AutorThema
rOots Offline
ZFX'ler


Registriert seit:
05.10.2007

Deutschland
123332248
C++ und streams machen mir zu schaffenNach oben.
Tag zusammen, habe grade versucht mein opengl framework so umzustricken, das es auf wunsch
die einstellungen für die opengl initialisierung aus ner datei liest.
um es einfach zu gestalten wollt ich erstmal nur die reinen daten in der datei (nicht wie ne ini)

datei sieht so aus:
voidFX.cfg
Code:
voidFX
800
600
32
0


so, das ist die "config"

die lese ich mit dem code aus (is sehr "gehackt" weils erstmal nur funktionieren sollte)
Code:
if(FromINI == 1)
    {
        std::stringstream stringBuffer;
        std::ifstream IniFile;
        std::string fileBuffer;

        IniFile.open(\"voidFX.cfg\", std::ios::in);

        IniFile >> fileBuffer;
        vfxLog()->writeLn(fileBuffer);  // LOG
        stringBuffer << fileBuffer;
        stringBuffer >> mVideoSettings.mTitle;
        stringBuffer.str(\"\");
        fileBuffer = \"\";

        IniFile >> fileBuffer;
        stringBuffer << fileBuffer;
        stringBuffer >> mVideoSettings.mWidth;
        stringBuffer.str(\"\");
        fileBuffer = \"\";

        IniFile >> fileBuffer;
        stringBuffer << fileBuffer;
        stringBuffer >> mVideoSettings.mHeight;
        vfxLog()->writeLn(\"%d\", mVideoSettings.mHeight);   // LOG
        stringBuffer.str(\"\");
        fileBuffer = \"\";

        IniFile >> fileBuffer;
        vfxLog()->writeLn(fileBuffer);
        stringBuffer << fileBuffer;
        vfxLog()->writeLn(stringBuffer.str());  // LOG
        stringBuffer >> mVideoSettings.mBitsPerPixel;
        vfxLog()->writeLn(\"%d\", mVideoSettings.mBitsPerPixel);
        vfxLog()->writeLn(stringBuffer.str());  // LOG
        stringBuffer.str(\"\");
        fileBuffer = \"\";

        IniFile >> fileBuffer;
        stringBuffer << fileBuffer;
        stringBuffer >> mVideoSettings.mFullscreen;
        stringBuffer.str(\"\");
        fileBuffer = \"\";

        IniFile.close();
    }

habe die stellen wo gelogt wird mal mit "// LOG" versehen damit man ungefähr sieht an welcher stelle was ausgegeben wird...

die logausgabe sieht für die stelle so aus:
Code:
voidFX
1685024620
32

2020177011


ich hab rumprobiert und manual gewälzt aber ich habe keine blaßen schimmer was ich falsch mache, hoffe jemand von euch weiss was ich falsch mach

mfg roots

1 Mal gendert, zuletzt am 13.02.2009, 01:13:42 Uhr von rOots.
13.02.2009, 01:11:23 Uhr
Darkforce Offline
ZFX'ler


Registriert seit:
20.05.2003

Nordrhein-Westfalen
Re: C++ und streams machen mir zu schaffenNach oben.
Hi,

zusätzlich zum leeren des Stringstreams mit stringBuffer.str(""); solltest du auch noch mit stringBuffer.clear(); die Error State Flags zurücksetzen.
Jedesmal wenn du das Ende von einem deiner Strings erreichst wird das EOF Flag gesetzt, woraufhin deine Operationen nicht mehr wie gewünscht funktionieren.

Viele Grüße,
Darkforce

1 Mal gendert, zuletzt am 13.02.2009, 09:39:07 Uhr von Darkforce.
13.02.2009, 09:38:56 Uhr
Schrompf Offline
ZFX'ler


Registriert seit:
04.04.2006

Sachsen
Re: C++ und streams machen mir zu schaffenNach oben.
Wie wär's denn etwas schlichter:

Code:
std::ifstream datei( \"config.txt\");
size_t breite = 800, hoehe = 600, tiefe = 32;
bool vollbild = true;
std::string bla;

if( datei.good()) // oder so ähnlich, habs nicht im Kopf
{
  datei >> bla; // der Header-Text
  datei >> breite >> hoehe >> tiefe >> vollbild;
}


Was genau Du da mit dem Lesen und Schreiben machst, verstehe ich nicht, aber evtl. hab ich auch ein Detail in der Problemstellung übersehen

Bye, thomas
13.02.2009, 12:09:43 Uhr
Dreamworlds Development
rOots Offline
ZFX'ler


Registriert seit:
05.10.2007

Deutschland
123332248
Re: C++ und streams machen mir zu schaffenNach oben.
Danke für die antworten, bin grad auf der Arbeit und kanns nicht testen.

@Schrompf: Glaube du hast da was missverstanden^^
Ich will meine Config auslesen um dann mit den Werten aus der Config OpenGL&SDL zu initialisieren.


edit: hab grad mal gecheatet und mir meine projekte eben von zu haus geholt ..
Klappt mit dem clear ... hatte glaub ich nur probiert entweder .clear() oder .str("");
mit beidem zusammen klappt es besten, vielen dank!


1 Mal gendert, zuletzt am 13.02.2009, 14:11:59 Uhr von rOots.
13.02.2009, 14:05:31 Uhr
Schrompf Offline
ZFX'ler


Registriert seit:
04.04.2006

Sachsen
Re: C++ und streams machen mir zu schaffenNach oben.
Zitat von rOots:

@Schrompf: Glaube du hast da was missverstanden^^
Ich will meine Config auslesen um dann mit den Werten aus der Config OpenGL&SDL zu initialisieren.


Hmm... auch beim zweiten Lesen glaube ich, dass Du Dir da was zu schwer machst. Lädt OpenGL&SDL etwa seine Einstellungen aus einem stringbuffer? Ich glaube nicht. Ich glaube eher, dass Du den Umweg über den stringBuffer nur gehst, weil Du denkst, dass Du nicht direkt Integer aus einem Filestream lesen kannst. Das kann man aber... meine Version tut genau das. Das einzige, was in der noch fehlte, war der Aufruf der Init-Funktionen mit den gelesenen Werten danach.
13.02.2009, 15:28:29 Uhr
Dreamworlds Development
rOots Offline
ZFX'ler


Registriert seit:
05.10.2007

Deutschland
123332248
Re: C++ und streams machen mir zu schaffenNach oben.
Hm .. du hast recht ^^ ... bis auf eine kleine unsauberheit ...

wenn die erste Zeile (der String für den Titel) nur aus einem zusammenhängenden wort besteht ... z.B
"voidFX" dann funktioniert dein code.

wenn die erste Zeile allerdings so aussieht:
"voidFX Framework v0.1 (based on OpenGL & SDL)"
dann funktioniert das nicht, da der ">>" operator vom ifstream wohl auch nach whitespaces abbricht zu lesen, nicht nach zeilenumbrüchen.

habs jetzt so gelöst:
Code:
std::getline(IniFile, mVideoSettings.mTitle);
IniFile >> mVideoSettings.mWidth;
IniFile >> mVideoSettings.mHeight;
IniFile >> mVideoSettings.mBitsPerPixel;
IniFile >> mVideoSettings.mFullscreen;

weil std::getline wirklich eine ganze zeile einließt. Bei Width/Height/Bpp und Fullscreen kann und muss ich davon ausgehen das es nur je 1 zahl ist bzw. eine zusammenhängende Zeichenkette deswegen kann man da den ">>" operator benutzen.

Danke für die Hilfen!
13.02.2009, 18:58:16 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel