2014-12-02 84 views
0

我試圖將txt文件拆分成幾個新文件。這是我到目前爲止已經完成:將文本文件拆分爲多個文件C++

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(); 

它創建文件,但突然停止工作。有誰知道爲什麼?

+2

你在調試器中運行你的代碼嗎?代碼中哪裏停止工作? – 2014-12-02 14:51:42

+0

是的,我做到了。以下是我所得到的結果:「程序接收信號sigsegv分段故障」 – 2014-12-02 14:53:25

+0

在發生分段故障的位置應該有一個行號。 – Max 2014-12-02 14:54:44

回答

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末尾的循環,則嘗試寫入最後一個文件。