日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C/C++】等分或指定行数把txt文档拆分成多份

發布時間:2025/3/21 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C/C++】等分或指定行数把txt文档拆分成多份 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1、輸入如下:

2、執行代碼:

3、輸出如下:

4、代碼如下:

4.1、平均拆分代碼

#include <iostream> #include <string> #include <fstream>using namespace std;//待處理樣本的路徑 #define TXT_PATH_NAME "..\\Inputs\\List.txt"void getTxtPartName (char *partName, string txtPathName) ;int main() {//統計txt中的總行數ifstream countSamplesNum(TXT_PATH_NAME);string samplesPathName;int samplesNum = 0; //txt中的總行數int splitNum = 0; //計劃拆分的份數int averageSamplesNum = 0; //平均每份的行數int remainder = 0; //余數//循環讀取txt的各行while (1) {if (!getline(countSamplesNum,samplesPathName)) {break;}if (samplesPathName.empty()) {continue; }samplesNum++;}cout<<"輸入txt的總行數:"<<samplesNum<<endl;cout<<"請輸入拆分數量:";cin>>splitNum;averageSamplesNum = samplesNum/splitNum;remainder = samplesNum%splitNum;char dispParams[1024]; //讀入原文件的名字char saveNameExt[1024]; //保存新文件的名字,源文件加數字getTxtPartName(dispParams, TXT_PATH_NAME); //從輸入txt的路徑獲取txt文件名if (remainder) //不能整除{cout<<endl<<endl<<"拆分結果如下:"<<endl<<"前"<<(splitNum-1)<<"份的行數為:"<<averageSamplesNum<<", 最后1份的行數為:"<<(samplesNum - averageSamplesNum*(splitNum-1))<<endl<<endl;}else //可以整除{cout<<endl<<endl<<"拆分結果如下:"<<endl<<splitNum<<"份的行數均為:"<<averageSamplesNum<<endl<<endl;}//實現拆分,文件保存ifstream totalSamplesPath(TXT_PATH_NAME);string singleSamplesPath;for (int i=0; i<splitNum-1; i++){sprintf(saveNameExt, "%s_%d.txt", dispParams, i);FILE *labelfilename = fopen(saveNameExt, "w+t");for (int j=0; j<averageSamplesNum; j++){getline(totalSamplesPath, singleSamplesPath);const char* ch=singleSamplesPath.c_str();if (j==0){fprintf(labelfilename, "%s", ch);} else {fprintf(labelfilename, "\n%s", ch);}}fclose(labelfilename);}//保存最后1份sprintf(saveNameExt, "%s_%d.txt", dispParams, (splitNum-1));FILE *labelfilename = fopen(saveNameExt, "w+t");int flg = 0;while (getline(totalSamplesPath, singleSamplesPath)){const char* ch=singleSamplesPath.c_str();if (0 == flg){fprintf(labelfilename, "%s", ch);}else{fprintf(labelfilename, "\n%s", ch);}flg++;}fclose(labelfilename);system("pause");return 0; }//從txtPathName截取最后一個“\\”后與“.”之前的部分名稱 void getTxtPartName (char *partName, string txtPathName) {char tmpChar1[1024]={'0',};char tmpChar2[1024]={'0',};strcpy(tmpChar1, txtPathName.c_str());int pathNameLen = strlen(tmpChar1); int pos = pathNameLen; while (pos > 0) {pos--; if (tmpChar1[pos] == '\\') {pos++; break;} }memcpy(tmpChar2, tmpChar1 + pos, pathNameLen-pos); pos = strlen(tmpChar2); while (pos > 0) {if (tmpChar2[pos] == '.') break; pos--; }tmpChar2[pos] = 0; sprintf(partName, "%s", tmpChar2); }

4.2、指定行數拆分代碼

#include <iostream> #include <string> #include <fstream>using namespace std;//待處理樣本的路徑 #define TXT_PATH_NAME "..\\Inputs\\List.txt"void getTxtPartName (char *partName, string txtPathName) ;int main() {//統計txt中的總行數ifstream countSamplesNum(TXT_PATH_NAME);string samplesPathName;int eachSplitGroupLineNum[100]; //保存各份的行數int samplesNum = 0; //txt中的總行數int splitNum = 0; //計劃拆分的份數//循環讀取txt的各行while (1) {if (!getline(countSamplesNum,samplesPathName)) {break;}if (samplesPathName.empty()) {continue; }samplesNum++;}cout<<"輸入txt的總行數:"<<samplesNum<<endl;cout<<"請輸入拆分數量:";cin>>splitNum;cout<<endl<<endl<<"請依次輸入"<<splitNum<<"份的行數:"<<endl;for (int i=0; i<splitNum; i++){cin>>eachSplitGroupLineNum[i];}cout<<endl<<endl;char dispParams[1024]; //讀入原文件的名字char saveNameExt[1024]; //保存新文件的名字,源文件加數字getTxtPartName(dispParams, TXT_PATH_NAME); //從輸入txt的路徑獲取txt文件名//實現拆分,文件保存ifstream totalSamplesPath(TXT_PATH_NAME);string singleSamplesPath;for (int i=0; i<splitNum; i++){sprintf(saveNameExt, "%s_%d.txt", dispParams, i);FILE *labelfilename = fopen(saveNameExt, "w+t");for (int j=0; j<eachSplitGroupLineNum[i]; j++){getline(totalSamplesPath, singleSamplesPath);const char* ch=singleSamplesPath.c_str();if (j==0){fprintf(labelfilename, "%s", ch);} else {fprintf(labelfilename, "\n%s", ch);}}fclose(labelfilename);}system("pause");return 0; }//從txtPathName截取最后一個“\\”后與“.”之前的部分名稱 void getTxtPartName (char *partName, string txtPathName) {char tmpChar1[1024]={'0',};char tmpChar2[1024]={'0',};strcpy(tmpChar1, txtPathName.c_str());int pathNameLen = strlen(tmpChar1); int pos = pathNameLen; while (pos > 0) {pos--; if (tmpChar1[pos] == '\\') {pos++; break;} }memcpy(tmpChar2, tmpChar1 + pos, pathNameLen-pos); pos = strlen(tmpChar2); while (pos > 0) {if (tmpChar2[pos] == '.') break; pos--; }tmpChar2[pos] = 0; sprintf(partName, "%s", tmpChar2); }

總結

以上是生活随笔為你收集整理的【C/C++】等分或指定行数把txt文档拆分成多份的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。