2014-12-02 15 views
0

Я пытаюсь разделить txt-файл на несколько новых файлов. Это то, что я сделал до сих пор:Разделить текстовый файл на несколько файлов C++

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

Мне нужно подсчитать, сколько строк мой текстовый файл имеет (он работает):

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

Вы запускаете свой код в отладчике? Где в коде он перестает работать? –

+0

Да, я это сделал. Вот то, что я получаю: «ошибка приема сегмента сигсегва программной ошибки» –

+0

Должен быть номер строки, где произошла ошибка сегментации. – Max

ответ

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.

Смежные вопросы