2개의 입력 파일 비교하기.
글쓴이: hurryon / 작성시간: 토, 2003/08/16 - 10:07오전
2개의 입력 파일을 비교하려고 합니다. 2개의 입력 파일은 키값을 기준으로 정렬이 되어 있는 상태로 들어 온다고 가정합니다.
A, B 라는 입력 파일이 있을때 키값을 기준으로
A 가 B 보다 크면 A 의 키값을 저장하고
A 가 B 보다 작으면 B 의 키값을 저장하고
A 와 B 가 같으면 A, B 의 라인을 저장하려고 합니다.
하지만 문제는...
A 가 B 보다 크면 A 의 키값을 저장한 후에 B 의 다음 라인으로 이동하여 비교 계속
A 가 B 보다 작으면 B 의 키값을 저장한 후에 A 의 다음 라인으로 이동하여 비교 계속
A 와 B 가 같으면 A, B 의 라인을 저장하고 A, B 모두 다음 다인으로 이동하여 비교 계속
이렇게 해야 합니다. 2번째 경우에서 좀 헤깔려 지내요. 대략 소스는 제가 머리을 굴려서 작업한 소스는 다음과 같습니다.
while(fgets(line_buffer_pc, sizeof(line_buffer_pc), in_pc)) { strncpy(key_pc, line_buffer_pc+8, 6); strncpy(key_pc1, line_buffer_pc+21, 14); while(fgets(line_buffer_ocr, sizeof(line_buffer_ocr), in_ocr)) { strncpy(key_ocr, line_buffer_ocr+8, 6); strncpy(key_ocr1, line_buffer_ocr+21, 14); if((strcmp(key_pc, key_ocr)) > 0) { pc_miss(key_pc); } else if((strcmp(key_pc, key_ocr)) < 0) { // 이부분이 문제인거 같습니다. ocr_miss(key_ocr); } else { check(line_buffer_pc, line_buffer_ocr); break; } } }
나머지 함수부분
void fopen_failure(char *argv) { fprintf(stderr, "%s fopen failure\n", argv); exit(EXIT_FAILURE); } void pc_miss(char *key_pc) { fprintf(out_pc_miss, "%s\n", key_pc); } void ocr_miss(char *key_ocr) { fprintf(out_ocr_miss, "%s\n", key_ocr); } void check(char *line_buffer_pc, char *line_buffer_ocr) { fprintf(out_check, "pc :%socr:%s", line_buffer_pc, line_buffer_ocr); }
음냐. OCR 시스템을 외주을 주었는데 이거 기존에 입력방식에 비해서 얼마만큼 정확한지 자체적으로 파악을 하기 위해서 짜고 있는데 잘 안되네요.
ㅡㅡ;
아래는 입력 파일의 예입니다.
nscode:~/c/0814$ head PC_all_ver.out OCR_all_ver.out ==> PC_all_ver.out <== 104441111405505001100100101010011 11 1 491956 316 412 104441111405505001100100101010011 22 2 4819571128 622 104441111405505001100100101010011 32 3 2119831008 621 104441111405505001100100101010011000 3 1 3 1 011111111 11 20 29 3 1 0 6 1 1 1 103911111405505001100200201010011 12 1 261978 425 611 103911111405505001100200201010011 2213 2619781116 611 103911111405505001100200201010011 3213 2619781123 611 103911111405505001100200201010011 4213 261978 7 1 611 103911111405505001100200201010011000 4 2 2 1 011111123 52 64 96 3 1 0 7 2 3 1 104421111405505001100200301010011 11 1 3319711016 311 ==> OCR_all_ver.out <== 181041 000 0 00000012 22 0 181041 0012 0 53 16 0000 181041 002110 19540612048001 181041 003210 19461012056001 170231 0041 5 8019240225078212 494071 0050 0 36 68 09 0010 494071 0062 2 321972 307030412 494071 0071 3 71997 619005100 494071 0081 3 42000 924002100 600591 1 21 42 5401020011000 4 1 3 1 011111111 11 57 60 5 2 0 6 2 2 2 nscode:~/c/0814$
Forums:
댓글 달기