Таким образом, я пытаюсь прочитать часть между 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;
Однако, после запуска второй версии моего кода, я все еще получаю такое же (неправильно) результат, как и в моем первом версии кода. На данный момент я немного запутался в том, почему мой код не работает. Если у кого-то будет блестящее понимание, это будет здорово. Благодаря!
Это не ваша проблема, но не используйте ['while (! File2.eof())'] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a- loop-condition -emed-wrong) – NathanOliver
Возможно, что вы вернулись из вызова getline() в нем пробелы (например), поэтому сравнить его с «400» точно не удастся. Возможно, более логично добавить логику поиска «400» в качестве первых трех символов строки (например). – dean
Глупый вопрос: «Я написал следующий код, который (я уверен) выполняет задачу« Если это так, зачем ставить вопрос? : P – Steve