人気ブログランキング | 話題のタグを見る

郵便番号データベース

sqlite3 で郵便番号データベースを作った。

まず、日本郵便の郵便番号データダウンロードページから、郵便番号のデータをダウンロードして解凍した。

解凍してできた KEN_ALL.csv をエクセルで開き、新郵便番号、都道府県名読み、市町村名読み、町名読み、都道府県名、市町村名、町名のフィールドを残して、後のカラムは削除した。これを、ubin.csvという名前をつけて保存した。

次に、TeraPad でこのファイルを開き、文字コードを指定して保存で、文字コードを utf-8 に、改行コードを LF に指定して、ubin.txt という名前で保存した。

それから、データベースを作るために、次のコードを ubin.sql として作成。

create table zipcode(
  zip text,
  keny text,
  siy text,
  choy text,
  ken text,
  si text,
  cho text
);

これを使って、sqlite3 で ubin.db を作成した。
C:\Users\******\Desktop\ken_all> sqlite3 ubin.db < ubin.sql

さらに、コマンドプロンプトから、次のように入力して ubin.txt を ubin.db の zipcode テーブルに読み込ませた。
C:\Users\******\Desktop\ken_all> sqlite3 -separator , ubin.db ".import ubin.txt zipcode"

これで、データベースは完成したが、このままでは utf-8 なのでコマンドプロンプトで表示できないし、日本語入力もできない。そこで、ruby で文字コード変換するために次のプログラム ubin.rb を作った。

require 'kconv'
require 'sqlite3'

db = SQLite3::Database.new('ubin.db')
print 'ubin> '
line = gets.chomp.toutf8
while line != '.quit'
  result = db.execute(line)
  result.each {|row| puts row.join(' ').tosjis}
  print 'ubin >'
  line = gets.chomp.toutf8
end
db.close

これを ruby ubin.rb で起動すると、コマンドプロンプトから SQL で、ubin.db を操作することができる。コマンドプロンプトでの日本語入力は、Alt+[半/全] でできる。
C:\Users\******\Desktop\ken_all> ruby ubin.rb
ubin> select zip, ken, si, cho from zipcode where cho = '玉川'

なお、この ubin.db は、そのまま、 ubuntu でも使うことができる。その場合は普通にターミナルから入力して日本語入力もできる。
$ sqlite3 ubin.db "select * from zipcode where cho = '玉川'"

SQLite のホームページの文書に、sqlite3 は、Oracleの置き換えではなくて、fopen() の置き換えだと書いてあったが、本当だ。データを db ファイルにしておくとどこにでも持っていけるし、検索も並べ替えも自由だし、sqlite3-ruby を使えばデータの加工も簡単にできる。便利な物があったものだ。
by tnomura9 | 2008-10-10 06:40 | Ruby | Comments(0)
<< utf-8 が使えるコマンドプ... sqlite3 の使い方 >>