我正在尝试将 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/