[英]How to Parse A file to block in 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
更改输出文件:
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;
}
如果您的代码使用不正确或您的代码块仅基于大括号而不是空格,则可以使用堆栈(STL)。 推开撑杆,然后弹起关闭撑杆。 每次堆栈为空时打开一个新文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.