从c ++中的文件中获取特定位置的详细信息

时间:2012-02-23 09:57:48

标签: c++

char a[133];
char x[4]="ccc";
    int line=3,count=1;

    //string aa;
    //cin>>aa;
    ifstream out("text");


    while(out.getline(a,4,':')&&(strncmp(a,x,4)))
            {cout<<"hi";
                    cout<<a<<endl;
            out.getline(a,4,'\n');
}
out.close();
return 0;`

在文本文件中

aaa:1111111
bbb:222222
ccc:333333
ddd:444444

我想跳上特定的线并抓住细节。但我没有得到它。请指导我如何在c ++中完成它

毕竟得到了解决方案。你也可以看到结果

这里是

int main(){
    ifstream in ("text");
    if(!in){cout<<"cannot open"<<endl;}
    string buffer;
    int line_count=1; size_t line=1;
    while(line){
      getline(in,buffer);
      if(!buffer.find_first_of("bbb:"))
      {
         cout<<line<<endl;
         break;
      }
      else
      {
       line=line+1;
      }
    }

    cout<<buffer<<endl;
    for(int line_count=0;line_count<line-1&&getline(in,buffer);line_count++)
    {
    }

    getline(in,buffer);

    in.close();
    return 0;
 }

再次感谢

1 个答案:

答案 0 :(得分:2)

首先,您可以将每一行读成std::string,如下所示:

std::ifstream in("text");
std::string buffer;
int line_count = 0;

// discard lines until we arrive at the desired line or an error/eof occurs
for(int line_count = 0; 
    line_cout < line && std::getline(in, buffer);
    line_count++) {}

if(in) { // check if last extraction was successful
    // process line stored in buffer
}
else {
    if(in.eof())
        std::cout << "Line-number was invalid" << std::endl;
    else
        std::cout << "An error occurred" << std::endl;
    return -1;
}

您可以使用iostreams here找到有关阅读文件的详细信息。 然后你可以处理那一行。使用成员函数std::string::find_first_of,您可以找到':',并使用成员函数std::string::substr,您可以在该位置拆分字符串。

请注意,此方法仅适用于问题中描述的简单格式。对于像"ab:c":"content"这样的格式,它可能无法正常工作。如果你有这样的格式,你需要编写一个更复杂的解析器,最好使用Boost.Spirit.Qi