2014-10-09 145 views
0

我是一个n00b C++程序员,我想知道如何从文本文件读取特定行。例如,如果我有一个文本文件包含以下行:如何使用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 2014-10-09 21:29:28

+0

文件是对指定的字节块的抽象;因此,没有办法找到文件中特定行的起始位置,而无需扫描所有前面的字节并计算换行符。如果您需要检索许多特定行,则可以在查找与每行开始对应的偏移量后扫描文件,然后使用此映射进行快速查找。 – Cameron 2014-10-09 21:30:19

+0

你期望这样做:'getline(read,1)'? – Galik 2014-10-09 21:58:01

回答

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 2014-10-10 00:44:01