Gå til innhold

Anbefalte innlegg

Hei

 

trenger litt hjelp her. :hmm:

her det framgangsmåten for og få text fra en fil til et program. :hmm:

 

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. :no:

 

og her kommer Confiq.tex

 

height=600
with=800
fullscreen=true
bit=32

 

mvh. Fredrik.

Endret av Fredrik90
Lenke til kommentar
Videoannonse
Annonse

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 av søppel
Lenke til kommentar
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.

Lenke til kommentar

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 av søppel
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...