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

How to split a data file into several sections

本文关键字:个部 拆分 文件 数据      更新时间:2023-10-16

我有一个文件,里面有一些数据,我正试图将它拆分成几个文件。查看数据文件将有助于您理解。

#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行。

当您读取包含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();
}