2014-12-02 2 views
0

몇개의 새로운 파일로 txt 파일을 분할하려고합니다. 즉, 내가 지금까지했던 작업은 다음과 같습니다 생성됩니다 얼마나 많은 새 파일을 확인텍스트 파일을 여러 파일로 분할하십시오. C++

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

long lineNumber = c; 
long max = 100; 

long nFiles; 

: 내 txt 파일이 얼마나 많은 줄 계산해야 할

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

(그것은 작동)

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(); 
,691 :
if((lineNumber % max) ==0) 
    nFiles = lineNumber/max; 
else 
    nFiles = lineNumber/max + 1; 

파일의 새 이름을 생성

파일을 생성하지만 갑자기 작동을 멈 춥니 다. 아무도 이유를 아나요?

+2

디버거에서 코드를 실행 했습니까? 코드에서 어디에서 작동하지 않습니까? –

+0

예. 여기에 내가 얻는 것입니다 : "프로그램 수신 신호 sigsegv 세그멘테이션 오류" –

+0

세그먼테이션 오류가 발생한 곳의 라인 번호가 있어야합니다. – Max

답변

1

이것은 디버거를 사용하면 도움이 될 수있는 대표적인 예입니다. 여기

당신 루프 :

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

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

maxline의 크기보다 더 큰 수 있고 당신이 line[j]에 액세스하려고 할 때이 세그먼트 오류가 발생합니다. 이 내부 루프는 실제로 line.size()으로 찾을 수있는 line의 길이를 넘지 않는지 확인해야합니다. 이 문제를 해결 한 후에도 프로그램 로직이 올바르지 않습니다. line은 아직 크기가 커지는 것처럼 보이지 않습니다. 외부 루프를 반복 할 때마다 line에 대한 액세스가 추가로 max 개의 인덱스를 이동하면 항상 실패합니다. line 끝에 루프를 중지하지 않으면 마지막으로 쓰려고하는 파일입니다.

관련 문제