/****************************/ /* 郵便番号検索 */ /* 郵便番号から住所を表示 */ /****************************/ #include #include void explode(char*,char*); // 項目を取り出す char data[32][128]; // 1レコード分のデータ void main( ) { FILE *fp; char zip[128],buf[512],*cp; int len; printf("\n***郵便番号検索***\n"); printf("\n郵便番号(ハイフンなし): "); fflush(stdout); gets(zip); // 郵便番号入力 len=strlen(zip); // 郵便番号文字数 fp=fopen("KEN_ALL.CSV","r"); // 郵便番号ファイル開く if ( fp==NULL ) goto END; // ファイルを開けない while ( 1 ) { cp=fgets(buf,256,fp); // 1レコード読む if ( cp==NULL ) break; // EOF explode(",",buf); // 項目を取り出す if ( memcmp(&data[2][0],zip,len)!=0 ) continue; // 郵便番号がちがう printf("\n住所:%s%s%s\n",&data[6][0],&data[7][0],&data[8][0]); break; } fclose(fp); // 郵便番号ファイル閉じる END: ; } void explode( /*----------------------------------*/ /* CSVデータから項目を取り出す */ /*----------------------------------*/ char *kugiri, // 区切り文字 char *buf) // CSVの1レコード { char *cp0,*cp; int i=0,len; memset(&data[0][0],'\0',32*128); // データの全文字をNULLに cp0=buf; // CSVデータの先頭アドレス for( i=0; i<31; i++ ) { if ( *cp0==0x22 ) cp0++; // 最初の"(0x22)を除く cp=strstr(cp0,kugiri); // 区切り文字を検索 if ( cp==NULL ) break; // 区切り文字なし len=cp-cp0; // 項目の文字数 if ( *(cp-1)==0x22 ) len--; // 最後の"(0x22)を除く if ( len>0 ) // 項目あり { memcpy(&data[i][0],cp0,len); // 項目の文字列をコピー } cp0=cp+1; // 次の文字のアドレス } strcpy(&data[i][0],cp0); // 最後の項目をコピー }