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

时间:2014-12-02 14:48:19

标签: 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();

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

1 个答案:

答案 0 :(得分:1)

这是使用调试器可以帮助您的时间的一个主要示例。

你在这里循环:

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

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

max可能会大于line的大小,当您尝试访问line[j]时,这会导致细分错误。这个内部循环真的应该检查你是否超过了line line.size()的长度。即使在您修复此问题后,程序逻辑也不是正确的,line似乎不会在外部循环的每次迭代中增大,而是使line的访问移动一个额外的max索引,如果你不在line结束时停止循环,那么你在尝试写的最后一个文件中总会失败。