[질문] 2파일을 비교해서 중복된 라인 제거하기
글쓴이: psycoder / 작성시간: 목, 2004/08/19 - 3:19오전
a.txt와 b.txt 두 파일을 비교해서 중복된 라인을 제거하고자 합니다.
int main(void) { int flag=1; FILE *fp1, *fp2, *fp3; char file1[1024]={0}, file2[1024]={0}; fp1=fopen("./a.txt", "r"); fp2=fopen("./b.txt", "r"); while(fgets(file1, sizeof(file1), fp1) !=NULL) { while(fgets(file2, sizeof(file2), fp2) !=NULL) { if(!strcmp(file1, file2)) { flag=0; break; } else { flag=1; continue; } } if(flag==1) { fp3=fopen("./c.txt", "a"); fprintf(fp3, "%s", file1); fclose(fp3); } continue; } fclose(fp2); fclose(fp1); return 0; }
이렇게 만들어봤는데요..
여기서 잘못된게 있나요?
실행해보면 바깥쪽 while() 루프가 한번밖에 실행되지 않습니다.
즉, a.txt 1라인만 b.txt 전체 라인과 비교한후 그냥 끝나버립니다.
답변에 미리 감사드립니다.
Forums:
(파일)스트림을 읽거나 쓸때는 앞에서 뒤로만 단 한번만 이동합니다.위
(파일)스트림을 읽거나 쓸때는 앞에서 뒤로만 단 한번만 이동합니다.
위에서처럼 루프를 돌기 위해 스트림의 처음(bos: begin of stream)으로 이동하려면, 파일을 닫고 다시 열거나, 파일 포인터를 bos로 수동으로 이동시켜줄 필요가 있습니다.
매번 루프를 돌때 마다 이런 작업을 한다면, 파일 I/O 속도가 느리기 때문에 프로그램이 상당히 느려집니다. 아예 파일을 전부 메모리에 올려놓고 루프를 돌리는것이 코딩하기도 편하고 속도도 빨라집니다.
제가 C++로 작성한 다음 코드를 참고하세요.
댓글 달기