2012-07-25 2 views
0

다른 파일 (UNSORTED.txt)의 모든 내용을 복사 한 후 처음으로 사용을 종료 한 후 SORTED.txt 파일을 다시 열고 읽는 중입니다. UNSORTED.txt에서 복사 한 후 복사 한 행 수를 계산하려고했습니다 (복사 프로세스가 아닌 별도의 프로세스로 계산). fegtc()는 파일의 시작 부분 (SORTED.txt)을 두 번째로 가리 키지 않으므로 줄의 값은 0으로 초기화됩니다. 또한 일반적으로 repointing을 얻을 수 있습니까? 파일을 닫지 않고 다시 열지 않고 fgetc()를 수행 했습니까?캔트가 파일을 두 번 읽는 fgetc를 사용하는 것 같습니다.

도움에 감사드립니다.

건배!

f = fopen("./TEXTFILES/UNSORTED.txt", "w"); 
    if (f == NULL){ 
     printf("ERROR opening file\n"); 
     return 100; 
    } 

    for (i=0; i<1000000; i++){ 
    fprintf(f, "%d\n", (23*rand()-rand()/13)); 
    } 
    fclose(f); 

    f = fopen("./TEXTFILES/UNSORTED.txt", "r"); 
    if (f == NULL){ 
    return 100; 
    } 
    s = fopen("./TEXTFILES/SORTED.txt", "w"); 
    if (s == NULL){ 
    return 101; 
    } 

    while(1){ 
    j = getc(f); 
    if (j == EOF) break; 
    fputc(j, s); 
    } 
    fclose(f); 
    //Closed source file. Read number of lines in target file. 
    fclose(s); 
    s = fopen("./TEXTFILES/SORTED.txt", "w"); 
    j = 0; 

    while(1){ 
    j = fgetc(s); 
    if (j == EOF) break; 
    if (j == '\n') lines++; 
    } 

    fclose(s); 
    printf("\n%d\n", lines); 
+1

'j'는 어떻게 선언됩니까? – cnicutar

+0

j는 int로 선언됩니다 – ceod

+0

파일의 시작 부분으로 돌아가려면'되감기 (들)'를 사용하십시오. [참조 링크] (http://www.cplusplus.com/reference/clibrary/cstdio/rewind/) – rkyser

답변

2

소리가납니다. 알아 낸 것처럼! 그러나이 예제를 모으기 위해 노력한 이후로 나는 어쨌든 그것을 게시 할 것이라고 생각했습니다.

#include <stdio.h> 

int main() 
{ 
    FILE * f; 
    FILE * s; 
    int i, j; 
    int lines = 0; 

    f = fopen("./TEXTFILES/UNSORTED.txt", "w+"); 
    if (f == NULL){ 
     printf("ERROR opening file\n"); 
     return 100; 
    } 

    for (i=0; i<1000000; i++){ 
     fprintf(f, "%d\n", (23*rand()-rand()/13)); 
    } 

    s = fopen("./TEXTFILES/SORTED.txt", "w+"); 
    if (s == NULL){ 
     fclose(f); // cleanup and close UNSORTED.txt 
     return 101; 
    } 

    // rewind UNSORTED.txt here for reading back 
    rewind(f); 

    while(1){ 
     j = getc(f); 
     if (j == EOF) break; 
     fputc(j, s); 
    } 

    // done with UNSORTED.txt. Close it. 
    fclose(f); 

    // rewind SORTED.txt here for reading back 
    rewind(s); 
    j = 0; 

    while(1){ 
     j = fgetc(s); 
     if (j == EOF) break; 
     if (j == '\n') lines++; 
    } 

    fclose(s); 

    printf("\n%d\n", lines); 

    return 0; 
} 
+0

고마워요! 방금 내 목적을 위해 되감기를 추가했습니다. – ceod

3

당신은 "w" (쓰기) 모드에서 파일을 열고 있습니다 :

s = fopen("./TEXTFILES/SORTED.txt", "w"); 

하지만 읽으 :

j = fgetc(s); 

당신은 아마 읽기 모드로 엽니 다 의미 :

s = fopen("./TEXTFILES/SORTED.txt", "r"); 
            ^^^ 
+0

아. 그것은 "r"과 함께 작동합니다. 같은 단계에서 쓴/덮어 쓰고 싶었 기 때문에 "w"로 사용했습니다. "r"모드 다음에 닫은 다음 "w"로 다시 열어야합니까? 그것에 대해가는 다른 방법? – ceod

+0

'parameters'섹션 [here] (http://www.cplusplus.com/reference/clibrary/cstdio/fopen/)을보십시오. 새 파일을 읽고 쓰려면 "w +"를 사용할 수 있어야합니다. 그러나 파일이 이미 존재하면 덮어 씁니다. – rkyser

+0

고마워요.하지만 w +가 저를 위해서 일하고 있지 않습니다. – ceod

관련 문제