新郵便番号データの説明
http://www.post.japanpost.jp/zipcode/dl/readme.html
このデータをそのまま加工を少なく格納すべくテーブルを定義
create table postlists -- ■ 郵便番号簿 ( id serial primary key, --郵便番号ID 自動連番 jiscode text, --全国地方公共団体コード old_id varchar(5), --(旧)郵便番号(5桁) post_id char(7), --郵便番号(7桁) ken_k text, --都道府県名カタカナ si_k text, --市区町村名カタカナ tyou_k text, --町域名カタカナ ken text, --都道府県名 si text, --市区町村名 tyou text, --町域名 somezips int, --一町域が二以上の郵便番号で表される場合 aza int, --小字毎に番地が起番されている町域の表示 choume int, --丁目を有する町域の場合の表示 sometowns int, --一つの郵便番号で二以上の町域を表す場合 changed int, --更新の表示 changed_why int --変更理由 ); create index postcodeindex on postlists using btree(post_id);
PostgreSQLのDBは、これまでEUC_JPで作成してきました。
郵便番号簿も.lzhを展開しKEN_ALL.CSV(shift-jis)を
require "nkf" ARGF.each_with_index do | line,i | line.gsub!(/"/,'') line.gsub!(/,/,"\t") print #{i+1}+"\t"+NKF.nkf('-XSe', line) end
上記スクリプトを s2e.rb として
$ ./s2e.rb KEN_ALL.CSV > ken_all.euc
で実行して 変換後のファイルを作成します。
これを PostgreSQLの postlists テーブルに流し込むには、DB名が、postとして
$ psql post
post=# \copy postlists from ken_all.euc
と copyコマンドでテーブル名とテキストファイルを指定します。
うまくゆけば、
\.
と表示されます。で半角カナは、全角カナに shift-jisはEUC_JPにしていたのを
そのまま使いつつ rails用にid も追加。
今回は、PostgreSQLのDBは、UTF-8なのでUTF-8 に挑戦です。
UTF-8変換は uconv を使っていたのが、今のnkfは、UTF-8に変換できたか
どうか調べるのが面倒だったので、結局 エディタでUTF-8に変換しken.utf8に