我有一个包含一些数据的文件,我试图把它拆分成几个文件。查看数据文件将有助于您理解。
#AFlags: -O0
#Bytes blowfish AES 3DES
1MB 60 20 280
5MB 320 90 1400
10MB 570 180 2720
20MB 560 180 2740
#BFlags: -O1
#Bytes blowfish AES 3DES
1MB 60 20 280
5MB 300 100 1440
10MB 600 170 2680
20MB 550 170 2790
这就是它的样子。我正在尝试读取此文件,然后将其拆分为#[letter]Flags
处的每一行。到目前为止,这就是我正在做的事情。
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main( int argc, char* argv[] ) {
string line_contents, initial_cpp_time_data, compare, find, file_path, file = "";
ofstream time_data_file;
//Grab the data from the old file
ifstream initial_cpp_time_data_file ( "cpp_time_data.txt" );
if (initial_cpp_time_data_file.is_open()) {
while ( getline( initial_cpp_time_data_file, line_contents ) ) {
compare = line_contents.substr(2,5);
if ( strcmp( compare.c_str(), "Flags" ) == 0 ){
file_path = "results_files/" + line_contents.substr(1,5) + "_result_data.dat";
cout << "file_path: " << file_path << endl;
time_data_file.open( file_path.c_str() );
time_data_file << file << endl;
time_data_file.close();
}
cout << "line_contents: " << line_contents << endl;
file = file + line_contents;
file.push_back('\n');
}
initial_cpp_time_data_file.close();
} else {
cout << "Unable to open the data file" << endl;
}
cout << "Done with format data!" << endl;
return 0;
}
我觉得我几乎拥有它,但我的逻辑有问题。它正在创建两个文件AFlag_result_data
和BFlag_result_data
。 AFlag_result_data
为空,BFlag_result_data
包含我想要的AFlag_result_data
数据。如何将数据分成正确的文件。此外,我可能有不同数量的行,所以我不能硬编码它来分割每6行。
答案 0 :(得分:1)
当您阅读包含Flags
的第一行时,file_content
为空。这就是为什么第一个文件中没有任何内容,第一个文件中应该包含的内容显示在第二个文件中。
以下经过调整的main
版本适用于我:
int main( int argc, char* argv[] ) {
string line_contents, initial_cpp_time_data, compare, find, file_path, file = "";
ofstream time_data_file;
//Grab the data from the old file
ifstream initial_cpp_time_data_file ( "cpp_time_data.txt" );
if (initial_cpp_time_data_file.is_open()) {
while ( getline( initial_cpp_time_data_file, line_contents ) ) {
compare = line_contents.substr(2,5);
if ( strcmp( compare.c_str(), "Flags" ) == 0 ){
file_path = line_contents.substr(1,5) + "_result_data.dat";
cout << "file_path: " << file_path << endl;
if ( time_data_file.is_open() )
{
time_data_file.close();
}
time_data_file.open( file_path.c_str() );
}
cout << "line_contents: " << line_contents << endl;
time_data_file << line_contents << std::endl;
}
if ( time_data_file.is_open() )
{
time_data_file.close();
}
initial_cpp_time_data_file.close();
} else {
cout << "Unable to open the data file" << endl;
}
cout << "Done with format data!" << endl;
return 0;
}
<强>更新强>
要处理空行,请更改行
compare = line_contents.substr(2,5);
到
if ( line_contents.size() >= 5 )
{
compare = line_contents.substr(2,5);
}
else
{
compare.clear();
}