文件自动拆分
Posted wqpkita
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件自动拆分相关的知识,希望对你有一定的参考价值。
将一个文件中同一编号的数据拆分,分别放到新建的文件夹中去。
5 #include <iostream> 6 #include <string> 7 #include <sstream> 8 #include <fstream> 9 #include <vector> 10 #include <direct.h> //创建文件夹头文件 11 #include<time.h> //获取时间头文件 12 using namespace std; 13 14 15 void getFiles( string path, vector<string>& files, vector<string> &ownname) 16 { 17 /*files存储文件的路径及名称(eg. C:\\Users\\WUQP\\Desktop\\test_devided\\data1.txt) 18 ownname只存储文件的名称(eg. data1.txt)*/ 19 20 //文件句柄 21 long hFile = 0; 22 //文件信息 23 struct _finddata_t fileinfo; 24 string p; 25 if((hFile = _findfirst(p.assign(path).append("\\\\*").c_str(),&fileinfo)) != -1) 26 { 27 do 28 { 29 //如果是目录,迭代之 30 //如果不是,加入列表 31 if((fileinfo.attrib & _A_SUBDIR)) 32 { /* 33 if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) 34 getFiles( p.assign(path).append("\\\\").append(fileinfo.name), files, ownname ); */ 35 } 36 else 37 { 38 files.push_back(p.assign(path).append("\\\\").append(fileinfo.name) ); 39 ownname.push_back(fileinfo.name); 40 } 41 }while(_findnext(hFile, &fileinfo) == 0); 42 _findclose(hFile); 43 } 44 } 45 46 int main() 47 { 48 49 clock_t start_time=clock(); //开始时间 50 51 int detector_seq; 52 int sequence; 53 int arrive_time; 54 55 char * filePath = "C:\\\\Users\\\\WUQP\\\\Desktop\\\\test_devided"; 56 char * addfilePath = "\\\\processed_data"; 57 char processedfilePath[100]; 58 strcpy_s(processedfilePath, filePath); 59 strcat_s(processedfilePath, addfilePath); 60 cout << processedfilePath << endl; 61 _mkdir(processedfilePath); 62 63 vector<string> files; 64 vector<string> ownname; 65 66 //获取该路径下的所有文件 67 getFiles(filePath, files, ownname); 68 int size = files.size(); 69 for (int i = 0;i < size;i++) 70 { 71 cout<<endl; 72 int num_receiver_times = 0; 73 string in_str; 74 75 //检查每个文件中的事件数目 76 ifstream in_File(files[i].c_str()); 77 if (in_File.is_open()) 78 { 79 cout<<files[i].c_str() <<" is open!"<< endl; 80 while (in_File >> detector_seq >> sequence >> arrive_time) 81 { 82 if(detector_seq == 0) 83 { 84 ++num_receiver_times; 85 } 86 else break; 87 } 88 } 89 in_File.close(); 90 91 //根据事件数目动态分开各事件的数据 92 cout << "the sources of this file is " << num_receiver_times << endl; 93 vector<string>* p = new vector<string>[num_receiver_times]; 94 ifstream in_File_(files[i].c_str()); 95 if (in_File_.is_open()) 96 { 97 while (getline(in_File_, in_str)) 98 { 99 for (int j=0; j<num_receiver_times; j++) 100 { 101 p[j].push_back(in_str); 102 if ( (j+1) % num_receiver_times != 0 ) 103 { 104 getline(in_File_, in_str); 105 } 106 } 107 } 108 } 109 in_File_.close(); 110 111 //分别将不同的数据写入不同的文件 112 for (int k = 0; k < num_receiver_times; k++) 113 { 114 int flag = 0; 115 char title[80]; 116 sprintf_s(title, "%s\\\\%s_%d.txt", processedfilePath, ownname[i].c_str(), k); 117 ofstream outfile(title, ios::ate|ios::out); 118 for (vector<string>::iterator iter = p[k].begin(); iter!= p[k].end(); iter++) 119 { 120 cout << flag++ << ": " << *iter << endl; 121 outfile << *iter << endl; 122 } 123 outfile.close(); 124 } 125 } 126 127 clock_t end_time=clock(); //结束时间 128 129 cout<< "Running time is: " 130 <<static_cast<double>(end_time - start_time)/CLOCKS_PER_SEC 131 <<"(s)"<<endl; //输出运行时间 132 return 0; 133 }
以上是关于文件自动拆分的主要内容,如果未能解决你的问题,请参考以下文章