|
ファイルの中身を比較しているプログラムなのですが、ただ、
馬鹿みたいに上から流れる記述になっています。
関数化とか便利な関数を使用するといったスマートというか
見栄えの良いものではないです。
改善の余地があると思うです。
良いアドバイス等お願いします。
--- file1.txt -----
aaaa
ccc
dddd
--- file2.txt ----
bbb
dddd
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
FILE *fp1 ;
FILE *fp2 ;
char buf1[256] ;
char buf2[256] ;
char key1[256] ;
char key2[256] ;
int flg_end_file1 = 0 ;
int flg_end_file2 = 0 ;
int branch = 0 ;
fp1 = fopen("file1.txt","r") ;
if (fp1 == NULL) {
printf("file open error file1.txt\n") ;
exit(1) ;
}
fp2 = fopen("file2.txt","r") ;
if (fp2 == NULL) {
printf("file open error file2.txt\n") ;
exit(2) ;
}
memset(buf1,'\0',sizeof buf1) ;
memset(key1,'\0',sizeof key1) ;
memset(buf2,'\0',sizeof buf2) ;
memset(key2,'\0',sizeof key2) ;
if (fgets(buf1,256,fp1) != NULL) {
buf1[strlen(buf1)-1] = '\0' ;
strcpy(key1,buf1) ;
} else {
memset(key1,0xff,sizeof key1) ;
flg_end_file1 = 1 ;
}
if (fgets(buf2,256,fp2) != NULL) {
buf2[strlen(buf2)-1] = '\0' ;
strcpy(key2,buf2) ;
} else {
memset(key2,0xff,sizeof key2) ;
flg_end_file2 = 1 ;
}
while(1) {
if ((flg_end_file1 == 1) && (flg_end_file2 == 1)) break;
branch = strcmp(key1,key2) ;
if (branch == 0) {
printf("match file1 and file2 : file1 [%s] file2 [%s]\n",key1,key2) ;
if (flg_end_file1 != 1) {
memset(buf1,'\0',sizeof buf1) ;
memset(key1,'\0',sizeof key1) ;
if (fgets(buf1,256,fp1) != NULL) {
buf1[strlen(buf1)-1] = '\0' ;
strcpy(key1,buf1) ;
} else {
memset(key1,0xff,sizeof key1) ;
flg_end_file1 = 1 ;
}
}
if (flg_end_file2 != 1) {
memset(buf2,'\0',sizeof buf2) ;
memset(key2,'\0',sizeof key2) ;
if (fgets(buf2,256,fp2) != NULL) {
buf2[strlen(buf2)-1] = '\0' ;
strcpy(key2,buf2) ;
} else {
memset(key2,0xff,sizeof key2) ;
flg_end_file2 = 1 ;
}
}
} else if (branch < 0) {
printf("file1 only : file1 [%s]\n",key1) ;
if (flg_end_file1 != 1) {
memset(buf1,'\0',sizeof buf1) ;
memset(key1,'\0',sizeof key1) ;
if (fgets(buf1,256,fp1) != NULL) {
buf1[strlen(buf1)-1] = '\0' ;
strcpy(key1,buf1) ;
} else {
memset(key1,0xff,sizeof key1) ;
flg_end_file1 = 1 ;
}
}
} else {
printf("file2 only : file2 [%s]\n",key2) ;
if (flg_end_file2 != 1) {
memset(buf2,'\0',sizeof buf2) ;
memset(key2,'\0',sizeof key2) ;
if (fgets(buf2,256,fp2) != NULL) {
buf2[strlen(buf2)-1] = '\0' ;
strcpy(key2,buf2) ;
} else {
memset(key2,0xff,sizeof key2) ;
flg_end_file2 = 1 ;
}
}
}
}
}
|