宅急便をはじめ、最近郵便番号を調べる機会が増えたので、PDIC用の郵便番号 辞書を作ってみました。使用感は上々で、特にPDICWの単語検索をうまく使うと 一瞬で目的の住所が表示され、たいへん便利です。
郵政省のサイトに郵便番号データが公開されているのでそれを入手し、下の awkスクリプトを通せば数分で1行テキスト形式データが作成されます。 それをPDICWでPDIC形式に変換すれば出来上がり。同一単語の処理は「改行付き で追加」が良いでしょう。変換が面倒そうですが、無料ですし、常に最新の データを利用できるメリットもあります。また、KDICの1行テキスト形式とも 互換性あるのでKDICでも使えるかも。
元はちゃんとインデントされているのだけど、ここに書き込むと行頭の空白が 無視されるようなのがちょっと悲しいですね(実行には差し支えないが)。
[yuubin.awk] # ================================================================ # 郵政省の郵便番号CSVデータをPDIC用1行テキスト形式に変換する # for jgawk by T.SEKINE # # 使い方: jgawk -f yuubin.awk < ken_all.csv > yuubin.txt # 出来たyuubin.txtをPDICWでPDIC形式に変換する # # 変換例:北海道札幌市中央区 大通西 /// 060-0042 (1~19丁目) # # 郵政省郵便番号データ入手先: # http://www.post.yusei.go.jp/newnumber/down.htm # # プログラムがやや複雑なのは複数行に渡る但書き(京都市など)のため。 # ================================================================ # 主な変数 # comment 但書き # flag 但書き継続フラグ
BEGIN { FS = "," InitZenToHanTable() }
{ gsub(/"/, "") ybango = substr($3, 1, 3) "-" substr($3, 4) # 1234567 -> 123-4567 if (flag == 0) { if ($9 ~ /以下に掲載がない場合/) { comment = $9 $9 = "" } else { p = index($9, "(") if (p > 0) { comment = substr($9, p) # 但書き -> comment $9 = substr($9, 1, p-1) if (comment !~ /)$/) { # 但書きが複数行にまたがる時 flag = 1 tyoume = $9 # 丁目保存 } } } } else { comment = comment $9 # 但書き追加 $9 = tyoume # 丁目回復 if (index(comment, ")") > 0) flag = 0 # 但書き終了 } if (flag == 0) { printf("%s%s", $7, $8) # "OO県OO市" if ($9 != "") printf(" %s", ZenToHan($9)) # " O丁目" printf(" /// %s", ybango) # " /// 123-4567" if (comment != "") printf(" %s\n", ZenToHan(comment)) # 但書き else printf("\n") comment = "" } }
function InitZenToHanTable( zench, hanch, n, n2, zena, hana, i) { zench = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,(,),「,」,、,-" hanch = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,(,),「,」,、,-" n = split(zench, zena, ",") n2 = split(hanch, hana, ",") for (i = 1; i <= n; i++) han[zena[i]] = hana[i] zenhan_pat = "[0-9A-Z()「」、-]" }
function ZenToHan(s, ch) { while (match(s, zenhan_pat) > 0) { ch = substr(s, RSTART, RLENGTH) sub(ch, han[ch], s) } return s }
|