– ユーザが郵便番号7桁を入力すると市区町村を返したい
– 郵便番号のデータは郵便局のHPで配布している
zipcode
– 全国一括データは12万件ある
-> 今回は東京都のデータを使用する
– データの中身を見ると、C列が郵便番号、G列が東京都、H列が区/市、I列が町村となっている。
まずExcelのデータ読み取りからか? ubuntuに”13TOKYO.CSV”を配置する。
#include <stdio.h> #include <string.h> // strtokに必要 #include <stdlib.h> #define MAX 2048 int main(void){ FILE *fp; char buf[2048] = {0}; char *ary[3]; char fname[] = "13TOKYO.CSV"; int i; if((fp=fopen(fname,"r"))!=NULL){ i = 0; while(fgets(buf, 2048, fp) != NULL){ ary[0] = strtok(buf,","); // ','を区切りに分解する ary[1] = strtok(NULL,","); ary[2] = strtok(NULL,","); printf("%s %s %s\n", ary[0],ary[1],ary[2]); i++; if(i > 5){ break; } } } fclose(fp); return 0; }
$ ./main
1000000 ?????s ???c??
1020072 ?????s ???c??
1020082 ?????s ???c??
1010032 ?????s ???c??
1010047 ?????s ???c??
1000011 ?????s ???c??
文字化けする
gccを変えてみたがダメ
$ gcc -o main main.c -finput-charset=UTF-8 -fexec-charset=CP932
csvをUTF-8の文字コードで保存してみる。
$ ./main
1000000 東京都 千代田区
1020072 東京都 千代田区
1020082 東京都 千代田区
1010032 東京都 千代田区
1010047 東京都 千代田区
1000011 東京都 千代田区
来た!
CSVはstrtokでカンマ区切りで取得すればOKとのことです。