c++ - 将文本文件拆分为多个文件c++

标签 c++ split

我正在尝试将 txt 文件拆分为几个新文件。这就是我到目前为止所做的:

long c = 0;
string s;
vector<string> v;

我需要计算我的 txt 文件有多少行(有效):

while(getline(inputFile, s, '\n')){
    v.push_back(s);
    c++;
}

long lineNumber = c;
long max = 100;

long nFiles;

检查将创建多少个新文件:

if((lineNumber % max) ==0)
    nFiles = lineNumber/max;
else
    nFiles = lineNumber/max + 1; 

创建文件的新名称:

long currentLine = 0;

for(long i = 1; i <= nFiles; i++){
    stringstream sstream;
    string a_i;
    sstream <<i;
    sstream >> a_i;

    string outputfiles =  "name" +"_" + a_i  +".txt";

    ofstream fout(outputfiles.c_str());


    for (int j = currentLine; j<max; j++){
        fout << v[j]<<endl;                         
    }

    fout.close();
    currentLine = max;


}
inputFile.close();

它创建文件但随后突然停止工作。有谁知道为什么?

最佳答案

这是一个很好的例子,说明使用调试器可以帮助您解决问题。

你在这里循环:

for (int j = currentLine; j<max; j++){
    fout << line[j]<<endl;                      
}

fout.close();
currentLine = max;
max = max + nMax; 

max 可以大于 line 的大小,这将在您尝试访问 line[j] 时导致段错误。这个内部循环确实应该检查您是否没有超过您可以使用 line.size() 找到的 line 的长度。即使在您修复此问题后,程序逻辑也不太正确,line 的大小似乎并未增长,但在外循环的每次迭代中您都访问了 line 移动一个额外的 max 索引,如果你不在 line 的末尾停止循环,这在你尝试写入的最后一个文件中总是会失败。

关于c++ - 将文本文件拆分为多个文件c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252207/

相关文章:

c++ - PKEY_EdgeGesture_DisableTouchWhenFullscreen 未声明的标识符

c++ - 对检索到的 vector 进行操作时出现段错误

c++ - 在 C 和 C++ 中,同一个标识符如何用于两个不同的事物?

c++ - 对 C++ 中的类型转换感到困惑

c++ - 是什么导致 hash_map 错误,我该如何解决?

Java正则表达式用标签分割

java - 如何用逗号分隔仅后跟字母数字字符的字符串

用于文本文件中值的 Python 拆分函数

c# - 拆分字符串并将其转换为双 C#

sql - 将列字符拆分为行 Oracle