如何将数据文件拆分为多个部分

时间:2014-04-29 15:21:30

标签: c++ io split fwrite

我有一个包含一些数据的文件,我试图把它拆分成几个文件。查看数据文件将有助于您理解。

#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_dataBFlag_result_dataAFlag_result_data为空,BFlag_result_data包含我想要的AFlag_result_data数据。如何将数据分成正确的文件。此外,我可能有不同数量的行,所以我不能硬编码它来分割每6行。

1 个答案:

答案 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();
}