Fredrik90 Skrevet 24. oktober 2004 Skrevet 24. oktober 2004 (endret) Hei trenger litt hjelp her. her det framgangsmåten for og få text fra en fil til et program. int confiq(int &hight, int &with, bool &fullscreen,int &bits) { char a_word; ifstream infile; infile.open("FLIGHT-REAL//confiq.tex"); if (!infile){ MessageBox(NULL,"Could not open Confiq.tex\nif you have allterd it send a mail to [email protected]","error", MB_OK); return 0; } while (infile.eof==false) { infile>> a_word; //checking switch(a_word);{ //hight case: "hight"{ hight=a_word; break; } //with case: "with"{ with=a_word; break; } // bits case: "bits"{ bits=a_word; break; } case "fullscreen"{ fullscreen=a_word; break; } } }//confiq() det er sikkert noe syntax feil her men orker ikke å sjekke. og her kommer Confiq.tex height=600 with=800 fullscreen=true bit=32 mvh. Fredrik. Endret 24. oktober 2004 av Fredrik90
søppel Skrevet 24. oktober 2004 Skrevet 24. oktober 2004 (endret) Bruk space, newline, og/eller tab ("whitespace" -tegn) som separator -- da kan du lese annenhver ting (key value) "automatisk": ... while((cin >> key) && (cin >> value)) { ... ..så kan du modifisere (generalisere?) denne til å fungere med filstreamer (også?): template<typename T> M_inline void readStdin(T& t, std::string msg, std::string on_wrong_input) { std::cout << msg << std::flush; while(!(std::cin >> t)) { std::cout << on_wrong_input; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << msg << std::flush; } } // readStdin Skulle være ganske simpelt å ordne. Endret 25. oktober 2004 av søppel
Fredrik90 Skrevet 25. oktober 2004 Forfatter Skrevet 25. oktober 2004 Bruk space, newline, og/eller tab ("whitespace" -tegn) som separator -- da kan du lese annenhver ting (key value) "automatisk": ... while((cin >> key) && (cin >> value)) { ... ..så kan du modifisere (generalisere?) denne til å fungere med filstreamer (også?): template<typename T> M_inline void readStdin(T& t, std::string msg, std::string on_wrong_input) { std::cout << msg << std::flush; while(!(std::cin >> t)) { std::cout << on_wrong_input; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << msg << std::flush; } } // readStdin Skulle være ganske simpelt å ordne. det går litt treigt kan du forklare litt.
søppel Skrevet 25. oktober 2004 Skrevet 25. oktober 2004 (endret) config.txt: width 800 height 600 fullscreen 0 bits 32 main.cpp: #include <iostream> #include <fstream> using namespace std; class Viewport { public: unsigned int height, width; bool fullscreen; unsigned int bits; }; // Viewport std::ostream& operator<<(std::ostream& os, Viewport& vp) { os << "width " << vp.width << endl; os << "height " << vp.height << endl; os << "fullscreen " << vp.fullscreen << endl; os << "bits " << vp.bits << endl; return(os); } // operator<< template<typename T> void readIn(T& t, iostream& in) { if(!(in >> t)) { cerr << "syntax error reading config-file"; in.clear(); in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } } // readIn int main() { fstream f("config.txt"); Viewport viewport; string key; while(f >> key) { if(key == "height") readIn(viewport.height, f); if(key == "width") readIn(viewport.width, f); if(key == "fullscreen") readIn(viewport.fullscreen, f); if(key == "bits") readIn(viewport.bits, f); } cout << "Viewport:" << endl; cout << viewport << endl; return(0); } // main ..dette gikk fryktelig fort - masse som kunne vært forbedret:] Edit: Her er en idé: * Når noe går galt under "parsing" av config-fila, bør den nevne hvilken linje dette gjelder. Endret 25. oktober 2004 av søppel
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå