我想阅读一个 .txt 文件,并在找到此特定行后...
===================
...我想抓住下一行。
我想我必须使用strcmp
and thefgets
但我不知道该怎么做。
我想阅读一个 .txt 文件,并在找到此特定行后...
===================
...我想抓住下一行。
我想我必须使用strcmp
and thefgets
但我不知道该怎么做。
很简单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
输出:
测试线
这将是 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);
}
#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