– ユーザが郵便番号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とのことです。