1、输入需要分割文档的绝对路径。
2、输入想要分割的数目。
3、分割好的文档会放在软件的目录里
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void getTextName(string& oriTxtName, string txtPath)
{
auto it = find(txtPath.rbegin(), txtPath.rend(), '\\');
if (it != txtPath.rend())
{
oriTxtName.assign(it.base(), txtPath.end());
auto it2 = find(oriTxtName.rbegin(), oriTxtName.rend(), '.');
oriTxtName.assign(oriTxtName.begin(), it2.base() -1);
}
}
int main()
{
cout << "请输入待分割txt文件路径" << endl;
string txtPath;
cin >> txtPath;
//统计文件总行数
ifstream countSamplesNum(txtPath);
string samplesPathName;
unsigned long long int samplesNum = 0;
int splitNums = 1;
unsigned long int averageSamplesNum = 0;
unsigned long int remainder = 0;
while (1)
{
if (!getline(countSamplesNum, samplesPathName))
{
break;
}
//if (samplesPathName.empty())
//{
// continue;
//}
samplesNum++;
}
cout << "数据总行数:" << samplesNum << endl;
cout << "请输入拆分数量" << endl;
cin >> splitNums;
averageSamplesNum = samplesNum / splitNums;
//char oriTxtName[1024];
string oriTxtName;
getTextName(oriTxtName, txtPath);
cout << oriTxtName << endl;
remainder = samplesNum % splitNums;
//如果不能整除,提醒一下
if (remainder)
{
cout << endl << endl << "拆分结果如下:" << endl << "前" << (splitNums - 1) << "份的行数为:" << averageSamplesNum
<< ", 最后一份的行数为:" << (samplesNum - averageSamplesNum * (splitNums - 1)) << endl;
}
else
{
cout << endl << endl << "拆分结果如下:" << endl << splitNums << "份的行数均为:" << averageSamplesNum << endl;
}
//开始拆分
ifstream totalSamplesPath(txtPath);
string singleSapmle;
char saveTxtName[1024];
for (int i = 0; i < splitNums; i++)
{
sprintf_s(saveTxtName, sizeof(saveTxtName), "%s_%d.log", oriTxtName.c_str(), i);
FILE *labelFileName;
if (fopen_s(&labelFileName,saveTxtName, "w + t") == 0){
if (labelFileName != NULL) {
for (int j = 0; j < averageSamplesNum; j++) {
getline(totalSamplesPath, singleSapmle);
fprintf(labelFileName, "%s\n", singleSapmle.c_str());
}
fclose(labelFileName);
}
else{
cout << "Error opening file " << saveTxtName << endl;
return 0;
}
}
else{
cout << "Error opening file " << saveTxtName << " using fopen_s" << endl;
return 0;
}
}
cout<<"——————-分割结束———————"<<endl;
system("pause");
return 0;
}