我在C ++中有一个看起来像这样的文本文件:
[layer]
type=background
data=
1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,
但是我在同一个文本文件中有多个图层,每个图层都必须以不同的方式构建,但是我需要为每个图层获取“data =”中显示的值。
我将如何实现这一目标?我尝试过的一种方法是将它们存储到矢量中,但是在将所有内容存储到矢量中后,没有任何溶剂可以从矢量中提取这些值...
while(file >> line)
{
words.push_back(line);
}
if(find(words.begin(), words.end(), "[header]") != words.end())
{
for(int i = find(words.begin(), words.end(), "[header]"); words.at(i) != "\n"; i++)
{
word += words.at[i];
}
}
cout << word << endl;
file.close();
答案 0 :(得分:0)
这很容易。你知道数据在“data =”行之后开始,以“[layer]”行结束,所以只需搜索它们:
std::ifstream f("your_file");
std::string string;
while( f >> string && !f.eof() )
{
if( string == "data=")//If we found the "data=" string, we know data begins next.
{
std::cout << std::endl << "new layer's data found" << std::endl;
f >> string;//going to the next string (the actual data)
//while we don't see the "[layer]" which indicates the end of data...
while( string != "[layer]" && !f.eof() )"[layer]"
{
std::cout << string;//...we output the data found
f >> string;//and continue to the next string
}
}
}