我想读一个.txt文件,找到这个特定的行......
===================
......我想抓住下一行。
我想我必须使用strcmp
和fgets
,但我不知道该怎么做。
答案 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