2015-04-23 2 views
1

Таким образом, я пытаюсь прочитать часть между 400 и ***** в следующем текстовом файле:Проблемы с чтением подраздела текстового файла с помощью операторов сравнения и строку функции сравнения

400 
    http://csweb.cs.wfu.edu 
    http://college.wfu.edu/cs/wp-content/themes/wfcollegeonepro 
    http://college.wfu.edu/cs/sample-page/feed 
    http://college.wfu.edu/cs/wp-includes/wlwmanifest.xml 
    http://college.wfu.edu/cs 
    http://www 
    http://www.wfu.edu 
    http://college.wfu.edu 
    http://college.wfu.edu/cs/news 
    ***** 
    16331 
    http://college.wfu.edu/cs/wp-content/themes/wfcollegeonepro http://csweb.cs.wfu.edu 
    http://college.wfu.edu/cs/sample-page/feed http://csweb.cs.wfu.edu 
    http://college.wfu.edu/cs/wp-includes/wlwmanifest.xml http://csweb.cs.wfu.edu 
    http://college.wfu.edu/cs http://csweb.cs.wfu.edu 
    http://www http://csweb.cs.wfu.edu 
    http://www.wfu.edu http://csweb.cs.wfu.edu 

Я написал следующий код, который (я уверен) выполняет задачу:

file2.open("./cswebDataCopy2.txt"); 
    cout << "Opening cswebData.txt file..." << endl; 
    if(!file2) 
    { 
     cout << "System failed to open cswebData.txt..." << endl; 
    } 
    else 
    { 
     cout << "cswebData.txt successfully opened!" << endl; 
    } 

    cout << "READING FROM: cswebData.txt" << endl; 

    while(!file2.eof()) 
    { 
     getline(file2,line4); 
     //cout << line4 << endl; 

     if(line4=="400") 
     { 
      cout << "Number of vertices in cswebData.txt: " << line4 << endl; 
      continue; 
     } 
     else if(line3=="*****") 
     { 
      cout << "Found the ****** " << endl; 
      break; 
     } 
     else 
     { 
      cout << "Couldn't find the 400 or ***** " << endl; 
     } 
    } 
    cout << "Code after while loop" << endl; 
    file2.close(); 

Однако, когда я запускаю код, он печатает только код внутри заявления еще столько раз, сколько есть строки в файле, а затем код после цикла while, хотя строки 400 и ***** являются clea rly в файле. Итак, я думал, что просто распечатаю строки, которые читаются, в любом случае пропущенные. Как оказалось, программа правильно считывает все строки. Затем я подумал, что это может иметь какое-то отношение к тому, как я сравниваю свои выражения if и else-if. Итак, я пошел вперед и переписал код, используя строку функции сравнения, как так:

while(!file2.eof()) 
    { 
     getline(file2,line4); 
     //cout << line4 << endl; 

     if(line4.compare("400")==0) 
     { 
      cout << "Number of vertices in cswebData.txt: " << line4 << endl; 
      continue; 
     } 
     else if(line4.compare("*****")==0) 
     { 
      cout << "Found the ***** " << endl; 
      break; 
     } 
     else 
     { 
      cout << "Couldn't find 400 or the ***** " << endl; 
     } 
    } 
    cout << "Code after the while loop" << endl; 

Однако, после запуска второй версии моего кода, я все еще получаю такое же (неправильно) результат, как и в моем первом версии кода. На данный момент я немного запутался в том, почему мой код не работает. Если у кого-то будет блестящее понимание, это будет здорово. Благодаря!

+1

Это не ваша проблема, но не используйте ['while (! File2.eof())'] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a- loop-condition -emed-wrong) – NathanOliver

+1

Возможно, что вы вернулись из вызова getline() в нем пробелы (например), поэтому сравнить его с «400» точно не удастся. Возможно, более логично добавить логику поиска «400» в качестве первых трех символов строки (например). – dean

+0

Глупый вопрос: «Я написал следующий код, который (я уверен) выполняет задачу« Если это так, зачем ставить вопрос? : P – Steve

ответ

1

Итак, выясняется, что проблема не связана ни с одной версией моего кода. По-видимому, у меня были некоторые скрытые символы в моем Sublime текстовом файле, которые отбрасывали чтение файла. Когда я скопировал и вставлял содержимое исходного текстового файла в совершенно новый, а затем запускал обе версии моего кода в новом текстовом файле, все работало так, как ожидалось. Спасибо, всем, за вклад!

Смежные вопросы