如何解析文件来阻止C++
问题描述:
我正在寻找一个优雅的方式来解析文件到块,每个块创建一个新的文件,例如:如何解析文件来阻止C++
原始文件:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
结果:
first file:
line 1
second file:
line 2
line 3
third file:
line 4
line 5
line 6
fourth file:
line 7
感谢
答
你可以使用scoped_ptr
s到改变输出文件时,输入行不以空格开头:
std::ifstream in("/your/input/file");
boost::scoped_ptr<std::ofstream> out(NULL)
int out_serial = 0;
std::string line;
while(std::getline(in, line))
{
// test: first character non blank
if(! line.empty() && (line.at(0) != ' ' && line.at(0) != '\t'))
{
std::ostringstream new_output_file;
new_output_file << "/your/output/file/prefix_" << out_serial++;
out.reset(new std::ofstream(new_output_file.str()));
}
if(out.get() != NULL) (*out) << line << std::endl;
}
答
看起来你可以使用这个算法:
计数的空格数在每行的开头,如果是小于或等于空格前面的非空行数,打开新文件。
你尝试过这么远吗?
+0
嘿,我很难用C++语法编写。该algortithm是没有问题的,我只是想避免使用C代码,并寻找一种方式把它写在文件迭代器什么的C++代码... – user534976 2011-01-20 05:35:33
答
如果你的代码是不正确的预期或您的块只根据括号没有空格,可以使用堆栈(STL)。按下左大括号并弹开大括号。打开一个新的文件,每个堆叠成为
你可以分享你的代码空的时候,你已经尽力了,提您所面临的问题(一个或多个)。 – 2011-01-20 05:30:43
嘿,我很难用C++语法编写。 algortithm不是问题,我只是想避免使用C代码,并寻找一种方法,用C++代码编写文件迭代器或其他东西 – user534976 2011-01-20 05:39:09