2016-07-21 5 views
-4

txt 파일에서 데이터를 수집하는 코드를 작성하고 있습니다. 다음 흥미있는 숫자를 얻으려면 do-while 루프를 사용합니다. 그러나 첫 번째 do-while 루프는 완벽하게 작동하지만 두 번째 루프에서는 ifstream myfile이 Pmax라는 단어에 집착합니다. 그 원인이 무엇인지 모릅니다. =/여기 Ifstream이 단어에 붙어있어 무한 루프를 만듭니다.

(나는 그것이 같은 비트 보이는 경우에도 XML을 사용하고 있지 않다) 파서의 흥미로운 부분입니다 :

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); 
} 

을 그리고 여기에 내가 읽고 싶은 txt 파일의 일부이다 :

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

제 DO-while 루프가 probScen 벌금을 처리하지만, 제 DO-동안에 myfile을 이와 같이 무한 루프를 생성 Pmax에 붙어 얻는다. 더 정확히 말하면 myfile은/probScen, 1, 1, Pmax까지 모든 단어를 읽지 만 더 이상 움직이지 않습니다. myfile.eof()는 true를 반환하지 않습니다.

도움을 주셔서 감사합니다.

+1

이렇게 XML을 구문 분석하여 수행 할 수있는 유일한 작업은 [http://thedailywtf.com] (http://thedailywtf.com)의 기능 기사입니다. XML. 서를 구. 분석하려면 적절한 XML 구문 분석기 라이브러리를 사용해야합니다. –

+3

이것이 나에게 (그리고 XML 파서를 사용하지 않고) 발생했다면, 디버깅 코드를 추가하여'myfile'에서 읽는 각 단어를 관찰 할 수있었습니다. 그건 내가 갇혀지고있는 곳을 보여줄거야. –

+0

http://www.boost.org/doc/libs/1_61_0/doc/html/property_tree/parsers.html#property_tree.parsers.xml_parser –

답변

1

numberScen이 1보다 커지면 문제가 발생합니다!

첫 번째 반복 :

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

두 번째 반복 다음 while 루프 내에서

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 
} 

는 실패 비트가 설정 될 때, 아무것도 전혀 읽을 수 없다, 그래서 코멘트는 latestly 유지 소비 ""...

+0

대단히 감사합니다. numberScen이 1로 설정되었다는 것이 확실했고 실제로 그렇지 않았습니다. 이것은 이제 완벽하게 이해됩니다. – Pantruche