2013-08-29 2 views
0

У меня есть текстовый файл со многими строками. Я хочу сохранить каждую строку в векторе строк. Я хочу прочитать из файла до тех пор, пока не будет достигнута последняя строка. Я использовал функцию EOF, но, похоже, также сохраняет пустые строки после последней строки. Вот фрагмент моего кода. text_list - это вектор, в котором хранятся все строки файла.Чтение от конкретного заполнения до последней строки в C++

void TextBuddy::storeDataFromFileInVector(string filename){ 
ifstream infile; 
int numbers; 
string textMessage; 
infile.open(filename); 

while (!infile.eof()){ 
    getline(infile, textMessage); 
    text_list.push_back(textMessage); 
} 
infile.close(); 
} 
+0

Это повторялось снова и снова: ** Не используйте 'eof()' в условии цикла. ** См. Http://stackoverflow.com/q/5605125. (Вместо этого вы можете использовать возвращаемое значение getline: _while (getline (infile, textMessage)) {text_list.push_back (textMessage);} _.) –

ответ

2

eof() не смотрит в будущее. Итак, когда вы правы перед EOF, вы также прочтете его в свой вектор и, возможно, испортите его.

Лучший способ, чтобы прочитать все строки в вектор является:

string line; 
while(getline(inFile, line) 
    text_list.push_back(line); 

Ваш цикл будет перерыв, как только вы читаете EOF или когда произошла другая ошибка.

Другой метод использует итераторы и библиотеку алгоритмов:

copy(istream_iterator<string>(inFile), istream_iterator<string>(), 
    back_inserter(text_list)); 

Это до вас, который вы предпочитаете.

0

Пустые линии, множественное число? Вы должны проверить, достигли ли они EOF перед нажатием на список.

infile.open(filename); 

getline(infile, textMessage); 
while(!infile.eof()) 
{ 
    text_list.push_back(textMessage); 
    getline(infile, textMessage); 
} 

изменить ответ KasF лучше.

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