2011-01-20 74 views
0

我正在寻找一个优雅的方式来解析文件到块,每个块创建一个新的文件,例如:如何解析文件来阻止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 

感谢

+0

你可以分享你的代码空的时候,你已经尽力了,提您所面临的问题(一个或多个)。 – 2011-01-20 05:30:43

+0

嘿,我很难用C++语法编写。 algortithm不是问题,我只是想避免使用C代码,并寻找一种方法,用C++代码编写文件迭代器或其他东西 – user534976 2011-01-20 05:39:09

回答

1

你可以使用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; 
} 
2

看起来你可以使用这个算法:

计数的空格数在每行的开头,如果是小于或等于空格前面的非空行数,打开新文件。

你尝试过这么远吗?

+0

嘿,我很难用C++语法编写。该algortithm是没有问题的,我只是想避免使用C代码,并寻找一种方式把它写在文件迭代器什么的C++代码... – user534976 2011-01-20 05:35:33

0

如果你的代码是不正确的预期或您的块只根据括号没有空格,可以使用堆栈(STL)。按下左大括号并弹开大括号。打开一个新的文件,每个堆叠成为