2016-07-21 27 views
-4

Ich schreibe einen Code, der Daten aus einer TXT-Datei sammelt. Um zur nächsten interessanten Zahl zu gelangen, verwende ich eine Do-While-Schleife. Die erste Do-While-Schleife funktioniert jedoch einwandfrei, aber in der zweiten bleibt die ifstream-Myfile auf dem Wort Pmax hängen. Keine Ahnung, was die Ursache sein könnte. =/Ifstream hängt an einem Wort und erstellt eine Endlosschleife

Hier ist der interessante Teil des Parsers (I XML nicht einmal benutzen obwohl es ein bisschen wie es aussieht):

ifstream myfile; 
string comment; 
const string filename = "data"; 
myfile.open(filename.c_str()); 

do{ 
    myfile>>comment; 
} while (comment != "</probScen>"); 
for (int i=0;i<numberScen;i++){ 
    myfile>>comment; 
    double prov; 
    myfile>>prov; 
    probScen.push_back(prov); 
} 

do{ 
    if(myfile.eof()){cout<<"EoF reached"<<endl;} 
    myfile>>comment; 
} while (comment != "</Pmax>"); 
for (int i=0;i<H;i++){ 
    myfile>>comment; 
    double prov; 
    myfile>>prov; 
    Pmax.push_back(prov); 
} 

Und hier ist der Teil der txt-Datei ich lesen will :

<probScen> scenario s - happening probability </probScen> 
1 1 
<Pmax> hour h - max price for this hour </Pmax> 
1 5 

die erste do-while-Schleife des probScen feine Griffe, aber myfile in dem zweiten do-while wird auf Pmax stecken, damit eine Endlosschleife zu schaffen. Um genau zu sein, liest myfile jedes einzelne Wort bis/probScen, dann 1, 1, Pmax, bewegt sich dann aber nicht weiter. Die Datei myfile.eof() gibt nie wahr zurück.

Vielen Dank im Voraus für Ihre Hilfe!

+1

Das einzige, was Sie erreichen werden, indem Sie versuchen, XML auf diese Weise zu parsen, ist ein Artikel auf [http://thedailywtf.com] (http://thedailywtf.com). Sie müssen eine geeignete XML-Parserbibliothek zum Parsen von XML-Dokumenten verwenden. –

+3

Wenn mir das passieren würde (und ich keinen XML-Parser verwende), würde ich einen Debugging-Code hinzufügen, um jedes Wort zu beobachten, das von 'myfile' gelesen wird. Das würde mir zeigen, wo die Dinge stecken geblieben sind. –

+0

Werfen Sie einen Blick auf http://www.boost.org/doc/libs/1_61_0/doc/html/property_tree/parsers.html#property_tree.parsers.xml_parser –

Antwort

1

Das Problem tritt auf, sobald numberScen größer als 1 (eins) ist!

Erste Iteration:

for (int i = 0; i < numberScen; i++) 
{ 
    myfile>>comment; // consumes 1 
    double prov; 
    myfile>>prov; // consumes 1 
    probScen.push_back(prov); 
} 

Zweite Iteration:

for (int i = 0; i < numberScen; i++) 
{ 
    myfile>>comment; // consumes <Pmax> 
    double prov; 
    myfile>>prov; // trying to parse 'hour', but fails! 
        // from now on, fail bit is set 
    probScen.push_back(prov); // stores uninitialized value 
} 

Im folgenden while-Schleife, da der Fail-Bit gesetzt ist, wird gar nichts zu lesen, und so bleibt Kommentar am latestly verbraucht "" ...

+0

Vielen Dank, du hast mich gerettet! Ich war mir sicher, dass numberScen auf 1 gesetzt wurde, und das war es auch nicht. Das macht jetzt vollkommen Sinn. – Pantruche