2

我想阅读一个 .txt 文件,并在找到此特定行后...

===================

...我想抓住下一行。

我想我必须使用strcmpand thefgets但我不知道该怎么做。

4

4 回答 4

6

很简单std::getline

const std::string WANTED_LINE = "===================";

std::ifstream file(filename);
std::string line;
while (std::getline(file, line) && line != WANTED_LINE){}

if (std::getline(file, line)) {/*read the line after successfully*/}

只要下一行被成功读取并且不是您要查找的行,for 循环就会一直运行。之后,您只需阅读下一个。如果在 for 循环中读取失败,则循环之后的读取也将失败。

如果出于某种超出我理解的原因strcmp需要,您可以最低限度地更改它:

while (std::getline(file, line) && std::strcmp(line.c_str(), WANTED_LINE) != 0){}

对于完全 C 的解决方案,您几乎可以做同样的事情。我在ideone上用 stdin 而不是文件(很容易更改)做了同样的事情,并将行限制为 256 个字符:

#include "stdio.h"
#include "string.h"

int main(void) {
    char line[256];
    while (fgets(line, 256, stdin) && strcmp(line, "12345\n") != 0){}
    if (fgets(line, 256, stdin)) {puts(line);}

    return 0;
}

输入:

abc
123
do re me
12345
测试线
hi

输出:

测试线

于 2013-07-19T18:09:43.830 回答
0

我的 C++ 有点生疏了,但是 ISTR 上的getline方法应该得到这条线,而字符串上的搜索方法会找到包含字符串中的字符串的索引。这些的组合应该可以满足您的需求。如果没有,请发表评论,我会进一步提供帮助。

于 2013-07-19T18:11:51.630 回答
0

这将是 C 的方式来做到这一点。

#define READBUFF_SIZE 100

FILE * infile = fopen(filename, "r");
char readbuff[READBUFF_SIZE] = "";

while (fgets(readbuff, READBUFF_SIZE, infile)) {
    if (strcmp(readbuff, "===============\n") == 0) break;
}

if (fgets(readbuff, READBUFF_SIZE, infile)) {
    // do something with readbuff
    printf("%s\n", readbuff);
}
于 2013-07-19T18:28:00.243 回答
0
#include<iostream>
#include<conio.h>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
int main() {

    string line = "";
    fstream f;
    f.open("a.txt");
    int count = 0;
    if (f.is_open())
  {

      while (f.good() )
    {


         getline(f,line);
         if(line=="12345")
         {

            while (f.good() )
             {
                 getline(f,line);
                 count++;
             }

         }
        //You can choose to change this terminatin condition as per your need
         if(count!=0)//Assuming there are line present after the particular line

             break;

    }
    f.close();
  }
else 
  {
      cout << "Unable to open file"; 
  }
    cout<<count;
    getch();
    return 0;
}

输入

wefwefwefwef
weffwfwefwe
wefwefwefwef
12345
fwefwef
wefwefwef

输出:2

 2
于 2013-07-19T18:29:58.150 回答