如何将数据文件拆分为多个部分
How to split a data file into several sections
我有一个文件,里面有一些数据,我正试图将它拆分成几个文件。查看数据文件将有助于您理解。
#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行。
当您读取包含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();
}
相关文章:
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 如何按多个括号类型拆分字符串,但仍将括号保留在C++?
- 将 Boost.Spirit.X3 解析器拆分为多个 TU
- 将执行循环拆分为多个线程 (1-N-1-N-1..)
- 如何使用 Boost C++ 打印第 n 个字符串拆分?
- 如何在拆分为多个文件的分层 SM 中退出子机器?(使用boost::MSM)
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 如何使用两个不同的分隔符拆分字符串
- 基于 C++ 中的多个字符串分隔符拆分字符串
- 将英文文本拆分为多个行
- 通过正则表达式拆分字符串会切断结果的第一个字母
- 如何在不将其拆分为两个嵌套循环的情况下打印整个形状?
- 如何将字符串拆分为一组 3 个字符,它们之间有空格
- 当我将C++类拆分为标头和实现时,我得到了 20 个没有意义的编译器错误
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 分解打包的 int 值并将其拆分为两个组件 c++
- C++:用多个分隔符拆分字符串,并在结果中保留分隔符
- 如何在c ++中用多个分隔符拆分LPWSTR并返回LPWSTR数组?
- 如何在c ++中用多个分隔符拆分字符指针并返回字符指针数组?