LadyMarion
Mitglied
Hallo,
ich habe eine Funktion, mit der ich Werte aus einer Datei einlesen möchte.
Die Funktion an sich funktioniert, jedoch hab ich noch ein kleines Problem:
Die Datei sieht folgendermaßen aus:
#Version2
WertA WertB WertC
1.23 4.56 7.89
Die Datei sieht immer gleich aus, es kann lediglich sein, dass der WertB und somit die ganze Spalte fehlt.
Meine Funktion sieht so aus:
Wie gesagt, im Prinzip funktioniert die Funktion. Die Funktion ist noch etwas umfangreicher, aber ich habe jetzt nur die relevanten Sachen geschrieben.
Die Fehler bzw. Probleme sind folgende:
Am Anfang soll die Version der Datei abgefragt werden, dementsprechend werden die Werte dann unterschiedlich rausgelesen. Sobald z.B. die Version2 gefunden ist, soll die if-Anweisung verlassen werden. Denn wenn die anderen Zeilen eingelesen werden, wird natürlich immer der else-Teil aufgerufen und das Programm beendet.
Dasselbe gilt für die Abfrage, ob WertB vorhanden ist. Auch hier kommt ständig die Fehlermeldung für alle Zeilen, die kein "WertB" enthalten.
Weil es in dieser while-Schleife mit diesem getline drin ist, werden diese if-Anweisungen halt immer wieder aufgerufen. Aber außerhalb dieser while-Schleife funktioniert es halt auch nicht.
Kann mir da jemand einen Tipp geben, wie diese if-Anweisungen nicht ständig durchlaufen werden?
Vielen Dank!
ich habe eine Funktion, mit der ich Werte aus einer Datei einlesen möchte.
Die Funktion an sich funktioniert, jedoch hab ich noch ein kleines Problem:
Die Datei sieht folgendermaßen aus:
#Version2
WertA WertB WertC
1.23 4.56 7.89
Die Datei sieht immer gleich aus, es kann lediglich sein, dass der WertB und somit die ganze Spalte fehlt.
Meine Funktion sieht so aus:
Code:
void read()
{
ifstream IN ("test.txt");
if (IN.is_open()) {
bool WertB_ = false;
string line;
while (!IN.eof())
{
getline(IN, line);
if (line.find("VERSION>2<") != string::npos)
typ = "2";
else if (line.find("VERSION>3<") != string::npos)
typ = "3";
else
{
cerr<<"# Invalid file!"<<endl;
exit(-1);
}
if((line.find("WertB") != string::npos))
WertB_ = true;
if (!line.empty() && line[0] != '#')
{
for (unsigned int i = 0; i < lines.size(); ++i)
{
stringstream sstr;
sstr << line;
// hier werden die Werte dann gelesen, usw...
}
}
if (!WertB_)
cout<<"Old version!"<<endl;
}
}
else
{
cerr<<"# Error opening file!"<<endl;
exit(-1);
}
}
Wie gesagt, im Prinzip funktioniert die Funktion. Die Funktion ist noch etwas umfangreicher, aber ich habe jetzt nur die relevanten Sachen geschrieben.
Die Fehler bzw. Probleme sind folgende:
Am Anfang soll die Version der Datei abgefragt werden, dementsprechend werden die Werte dann unterschiedlich rausgelesen. Sobald z.B. die Version2 gefunden ist, soll die if-Anweisung verlassen werden. Denn wenn die anderen Zeilen eingelesen werden, wird natürlich immer der else-Teil aufgerufen und das Programm beendet.
Dasselbe gilt für die Abfrage, ob WertB vorhanden ist. Auch hier kommt ständig die Fehlermeldung für alle Zeilen, die kein "WertB" enthalten.
Weil es in dieser while-Schleife mit diesem getline drin ist, werden diese if-Anweisungen halt immer wieder aufgerufen. Aber außerhalb dieser while-Schleife funktioniert es halt auch nicht.
Kann mir da jemand einen Tipp geben, wie diese if-Anweisungen nicht ständig durchlaufen werden?
Vielen Dank!