在设置一些字符后获取下一行

时间:2013-07-19 18:03:28

标签: c++

我想读一个.txt文件,找到这个特定的行......

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

......我想抓住下一行。

我想我必须使用strcmpfgets,但我不知道该怎么做。

4 个答案:

答案 0 :(得分: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个
  请帮我   12345个
  测试线
  嗨

输出:

  

测试线

答案 1 :(得分:0)

我的C ++有点生疏,但是iStream上的getline方法的ISTR应该得到该行,而字符串上的search方法将找到包含字符串中的字符串的索引。这些的组合应该做你想要的。如果没有,请发表评论,我会进一步提供帮助。

答案 2 :(得分: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);
}

答案 3 :(得分: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