You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何从单个TXT文件拆分导出多个指定行数的TXT文件

原有代码只能处理少于10个文件的核心原因很明显:你原来的文件名是固定的字符数组,只修改第一个字符的数值,最多只能生成1到9开头的文件名,序号超过个位数就完全没法用了;另外原有逻辑是硬编码拆成3个文件,和你要拆5000份、每份100行的需求完全不匹配。

修改后的代码如下:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

int main() {
    vector<string> VecData;
    string data;

    // 读取源文件所有数据
    ifstream in("mytext.txt");
    while (in >> data) {
        VecData.push_back(data);
    }
    in.close();

    const int LINES_PER_FILE = 100;  // 每个输出文件存100行
    const int COLS_PER_LINE = 5;     // 每行固定5列
    const int ELEM_PER_FILE = LINES_PER_FILE * COLS_PER_LINE; // 每个文件对应vector里的元素数量
    int total_file_cnt = VecData.size() / ELEM_PER_FILE;

    ofstream out_file;
    for (int file_no = 1; file_no <= total_file_cnt; file_no++) {
        // 动态生成带序号的文件名,支持任意位数序号
        string file_name = to_string(file_no) + "_Hello.txt";
        out_file.open(file_name);
        // 写入当前文件对应的100行数据
        int start_pos = (file_no - 1) * ELEM_PER_FILE;
        int end_pos = file_no * ELEM_PER_FILE;
        for (int i = start_pos; i < end_pos; i += COLS_PER_LINE) {
            out_file << VecData[i] << "\t"
                     << VecData[i+1] << "\t"
                     << VecData[i+2] << "\t"
                     << VecData[i+3] << "\t"
                     << VecData[i+4] << "\n";
        }
        out_file.close();
    }

    cout << "Done\n";
    return 0;
}

主要调整点:

  1. 把原有的硬编码文件名逻辑改成了字符串动态拼接,直接把文件序号转成字符串再拼上固定后缀,不管是两位数还是四位数的序号都能正常生成文件名,完全满足5000个文件的命名需求
  2. 删掉了原有的固定拆3份的逻辑,按需求定义了参数常量,自动计算每个文件要写的内容范围和总拆分数量
  3. 遍历逻辑完全按输入的行顺序分配,第1个文件存1-100行,第2个存101-200行,直到最后一个文件存最后100行,和你要求的规则完全一致
  4. 如果你后续要处理更大的文件不想占太多内存,也可以不用把所有数据存到vector里,读一行写一行计数到100就换文件就行,现在50万行的量级用现有逻辑完全没问题。

内容的提问来源于stack exchange,提问作者kingsley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:48:02