Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit aus datei lesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.04.2006, 21:44 Uhr
Karldin Shinowa
Professional Noob


Hab ne Datei mit dem Aufbau:

Code:
CHOICE NUMBER=1

CHOICE=Laengenmasse
LINK=modes/Laengenmasse.txt


und ein Pogramm das es Ausliest und verarbeitet

C++:
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include"FileFunctions.h"
struct Choice
{
   string name;
   string link;
};
int main()
{
   string*Namen;//erst später benutzt
   int*Spruenge;//erst später benutzt
   Choice*Choices;
   Choice*usedChoice;//erst später benutzt
  
   string puffer;
   char input;
   int number;
  
   fstream File;
  
   File.open("Config.txt",ios::in);
  
   getline(File,puffer,'=');//read the word bevore the =
   if(puffer!="CHOICE NUMBER")
   {
     cout<<"ERROR IN CONFIG";
     getchar();
     return 0;
   }
  
   getline(File,puffer);//read the thing after =
  
   File.close();
  
   number=atoi(puffer.c_str());//number is the puffer convented into int
  
   Choices=new Choice[number];
  
   for(int i=0;i<number;i++)
   {
      getline(File,puffer,'\n');//read line with nothing
  
      getline(File,puffer,'=');//hier und bei allen folgenden enthält der puffer nur mehr lleerzeilen
      if(puffer!="CHOICE")
      {
         cout<<"ERROR IN CONFIG";
         getchar();
         return 0;
      }
      
      getline(File,puffer);
      Choices[i].name=puffer;
      
      getline(File,puffer,'=');
      if(puffer!="LINK")
      {
        cout<<"ERROR IN CONFIG";
        getchar();
        return 0;
      }
      
      getline(File,puffer);
      Choices[i].link=puffer;
   }


Aber er sollte nicht nur Leerzeilen einlesen? wo oder was is der fehler????
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 14.04.2006 um 21:48 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.04.2006, 00:30 Uhr
Karldin Shinowa
Professional Noob


da hier noch nich viel gekommen ist poste ich einfach mal den ganzen code:

C++:
struct Choice
{
   string name;
   string link;
};
int main()
{
   string*Namen;
   int*Spruenge;
   Choice*Choices;
   Choice*usedChoice;
  
   string puffer;
   char input;
   int number;
  
   fstream File;
  
   File.open("Config.txt",ios::in);
  
   getline(File,puffer,'=');//read the word bevore the =
   if(puffer!="CHOICE NUMBER")
   {
     cout<<"ERROR IN CONFIG";
     getchar();
     return 0;
   }
  
   getline(File,puffer);//read the thing after =
  
   File.close();
  
   number=atoi(puffer.c_str());//number is the puffer convented into int
  
   Choices=new Choice[number];
  
   for(int i=0;i<number;i++)
   {
      getline(File,puffer,'\n');//read line with nothing
      //ab hier macht er es falsch und liest ne leerzeile ein wo keine ist
      getline(File,puffer,'=');//read the thing bevore =
      
      
      if(puffer!="CHOICE")
      {
         cout<<"ERROR IN CONFIG";
         getchar();
         return 0;
      }
      
      getline(File,puffer);//read the thing after =
      
      Choices[i].name=puffer;
      
      getline(File,puffer,'=');//read the thing bevore =
      if(puffer!="LINK")
      {
        cout<<"ERROR IN CONFIG";
        getchar();
        return 0;
      }
      
      getline(File,puffer);//read the thing after =
      Choices[i].link=puffer;
   }
  
   bool beenden=false;
   while(!beenden)
   {
      Cls();
      
      cout<<"Welcher Plugin soll verwendet werden?"<<endl;
      for(int i=0;i<(  sizeof(Choices)/sizeof(Choices[0])  );i++)
      {
         cout<<i+1<<Choices[i].name<<endl;
      }
      
      input=GetKeypress()-1;
      if(  input>=0&&input<(sizeof(Choices)/sizeof(Choices[0]))  )
      {
         usedChoice=&Choices[input];
         beenden=true;
      }
   }
  
   File.open((usedChoice->link).c_str(),ios::in);
  
   getline(File,puffer,'=');//read the thing bevore =
   if(puffer!="UNIT NUMBER")
   {
        cout<<"ERROR IN CONFIG";
        getchar();
        return 0;
   }
   getline(File,puffer);
   number=atoi(puffer.c_str());
  
   Namen=new string[number];
   Spruenge=new int(number-1);
  
   for(int i=0;i<(  sizeof(Namen)/sizeof(Namen[0])  );i++)
   {
      getline(File,puffer);//read line with nothing
      getline(File,puffer,'=');
      if(puffer!="NAME")
      {
         cout<<"ERROR IN CONFIG";
         getchar();
         return 0;
      }
      getline(File,puffer);
      Namen[i]=puffer;
   }
  
   for(int i=0;i<(  sizeof(Spruenge)/sizeof(Spruenge[0])  );i++)
   {
      getline(File,puffer);//read line with nothing
      getline(File,puffer,'=');
      if(puffer!="EXCHANGE VALUE")
      {
         cout<<"ERROR IN CONFIG";
         getchar();
         return 0;
      }
      getline(File,puffer);
      Spruenge[i]=atoi(puffer.c_str());
   }
}


--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 16.04.2006 um 00:31 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.04.2006, 18:30 Uhr
Karldin Shinowa
Professional Noob


ich sags ja nur ungern aber ich find den fehler einfach nicht Weiß keiner Rat?
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.04.2006, 20:10 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich habe mir Die Routine nicht im Detail angeschaut, denke aber, daß wenn von Der Struktur alles in Ordnung wäre, daße s dann an der Fehlenden Fehlerbehandlung liegt: wenn ein fstream auch nur einmal in einern Fehler läuft, dann verweigert er fortan den Dienst, bis clear aufgerufen wurde. Hngt vielleicht damit zusammen?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.04.2006, 22:46 Uhr
Karldin Shinowa
Professional Noob


checke es mal
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.04.2006, 20:08 Uhr
Karldin Shinowa
Professional Noob


so eins is klar der fstram will plötzlich nimma.
wenn ichs mit

C++:
if(!File)
{
   cout<<"fstream hin";
}


überprüfe vor der fehlerzeile (siehe post 1) gibt er mir fstream hin aus-> fstream File==0
Was soll ich tun?
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.04.2006, 22:50 Uhr
predator



hmm, du schließt den Stream ja kurz vorher...
wahrscheinlich hängt es damit zusammen
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.04.2006, 23:43 Uhr
~MartinF
Gast


Schau mal mein Post auf http://www.coding-board.de/board/showthread.php?t=19506. Dort habe ich eine Lösung zu einem ähnlichen Problem geschrieben. Du müsstest die Funktionen ein wenig anpassen.


C++:
void konfig::Konfig::read(const string& file)
{
  ifstream is(file.c_str());

  string tmp;
  while(getline(is, tmp)) {
    int r=tmp.find_first_of('=');
    vec[tmp.substr(0, r)] = tmp.substr(r+1);
  }
}


void konfig::Konfig::write(const string& file) const
{
  ofstream os(file.c_str(), ios_base::out);

  map<string, string>::const_iterator i=vec.begin();
  while (i!=vec.end()) {
    os << i->first << '=' << i->second << endl;
    ++i;
  }
}




Man beachte, dass man nur Lesezugriff auf die Konfiguration erhällt, da die Werte von der Zugriffsmethode Call by Value zurückgegeben werden. Um in die Konfig schreiben zu können, muss man die Umsetzung des Intexoperators [] verändern.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.04.2006, 00:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:


C++:
void konfig::Konfig::write(const string& file) const
{
  ofstream os(file.c_str(), ios_base::out);

  map<string, string>::const_iterator i=vec.begin();
  while (i!=vec.end()) {
    os << i->first << '=' << i->second << endl;
    ++i;
  }
}




Das erinnert mich an das Thema for-schleifen in nem anderen Thread. Da würde ich mal glatt als einer Verschmähung bezeichnen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.04.2006, 13:48 Uhr
~MartinF
Gast


Ok, du kannst datürlich auch deine for-Schleife verwenden. Aber abgesehen davon, dass dann das Layout von dem Post durchinander kommt, dürfte das man im Bezug auf die Performance auf exakt das gleiche Ergebnis kommen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: