2014-10-09 4 views
0

Я программист на C++ n00b, и я хотел бы знать, как читать определенную строку из текстового файла. Например, если у меня есть текстовый файл содержащий следующие строки:Как читать определенную строку из файла с помощью fstream (C++)

1) Hello 
2) HELLO 
3) hEllO 

Как бы я идти о чтении, скажем, линия 2 и печать его на экране? Это то, что я до сих пор ..

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    string sLine = ""; 
    ifstream read; 

    read.open("input.txt"); 

    // Stuck here 
    while(!read.eof()) { 
     getline(read,1); 
     cout << sLine; 
    } 
    // End stuck 

    read.close(); 

    return 0; 
} 

Код в bewteen разделе комментариев, где я застрял. Благодаря!!

+0

относящиеся к использованию eof http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – Niall

+0

Файлы представляют собой абстракции по именованным кускам байтов; как таковой, нет способа найти, где определенная строка начинается в файле, не просматривая все предыдущие байты и считая новые строки. Если вам нужно получить много определенных строк, вы можете сканировать файл после поиска смещений, соответствующих каждому запуску линии, а затем использовать это сопоставление для быстрого поиска. – Cameron

+0

Что вы ожидаете от этого: 'getline (read, 1)'? – Galik

ответ

4

Во-первых, ваше условие цикла неверно. Don't use while (!something.eof()). Это не делает то, что вы думаете.

Все, что вам нужно сделать, это отслеживать, на какой строке вы находитесь, и прекратить чтение после того, как прочитали вторую строку. Затем вы можете сравнить счетчик строк, чтобы увидеть, попали ли вы во вторую строку. (Если вы не сделали, то файл содержит менее двух строк.)

int line_no = 0; 
while (line_no != 2 && getline(read, sLine)) { 
    ++line_no; 
} 

if (line_no == 2) { 
    // sLine contains the second line in the file. 
} else { 
    // The file contains fewer than two lines. 
} 
+0

Спасибо! @cdhowie – ParadizeLimbo

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