|
「住所録」は名前と住所その他の情報を登録するものですが、住所を入力する際、郵便番号が分かっている場合には、郵便番号データから住所を読み込んでくると住所入力をするのが楽になる、という事があります。郵便番号「辞書」は、郵便番号と、それに対応する住所内容のセットから成るデータライブラリの事を指します。IME(日本語入力)に郵便番号辞書があってそれを利用出来る場合もありますが、他にも利用出来る場合も有り得ますので、ここでは郵便番号辞書を作成する事について記述します。
とはいっても、郵便番号辞書を1から自分で入力するのはとても大変、簡単には無理だ、という事はあるでしょう。ですが、日本郵便(http://www.post.japanpost.jp/)では、郵便番号のCSVデータをダウンロードする事が出来るようになっていますのでこれを利用すればデータ入力をする手間が省けますので比較的容易になります。「読み仮名データの促音・拗音を小書きで表記するもの」を選択し、ファイル「ken_all.lzh」をダウンロードする事が出来ます。これを解凍すると「KEN_ALL.CSV」というファイルが展開されます。
このファイルをテキストエディタ(スクリーンエディタ)で開くと
01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
01101,"064 ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0
01101,"060 ","0600041","ホッカイドウ","サッポロシチュウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東",0,0,1,0,0,0
01101,"060 ","0600042","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(1-19チョウメ)","北海道","札幌市中央区","大通西(1〜19丁目)",1,0,1,0,0,0
・・・ |
のようになっています。上記2行目は
0 | 01101 |
1 | 064 |
2 | 0640941 |
3 | ホッカイドウ |
4 | サッポロシチュウオウク |
5 | アサヒガオカ |
6 | 北海道 |
7 | 札幌市中央区 |
8 | 旭ケ丘 |
9 | 0 |
10 | 0 |
11 | 1 |
12 | 0 |
13 | 0 |
14 | 0 |
という風に並んでいますが、このうち必要とするのは、No.2の郵便番号、No.3〜No.5のカナ表記、No.6〜No.8の都道府県・市区名・町村名等、とします。カナ表記は当面必要無いですが、他のプログラムで必要になるかもしれませんので一応データベース化しておく事にします。
データ作成方法も、都道府県と市区名を一緒にするしない、市区名と町村名を一緒にするしない、全て一緒にするしない、がありますが、それもプログラムに依るのですが、ここでは上記と同様、ばらばらのままにしておきます。プログラム側でくっつける処理を入れたら良いだけですので。
次に問題となるのは、文字列の長さ(文字数)ですが、これはデータベースを作成する前に、文字数をチェックするようにします。目視でチェックするのも大変ですし、アバウトに決め打ちするのも危険ですし、多めにとるとデータ容量が勿体ないですので。(郵便番号は7文字確定です)
あと、上記1行目にありますが、No.8に「以下に掲載がない場合」と入る場合や「〜の次に〜」と入る場合があります。その場合には、その項目とNo.5の項目は、NULL(データ無し)状態にするとします。
流れとしては
のようになります。
プログラムと同じフォルダにファイル「KEN_ALL.CSV」を置いた状態で実行するようにします。テーブル名は「ZIPDIC」とします。
プロジェクト「d011」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「d011」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | d011−郵便番号辞書作成 |
[アプリケーション]頁
アイコン |
ImageEditorで作成した
アイコンを指定 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\db\d011 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\db\d011」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\db\d011」の中に「d011.dpr」として保存
◆
Form1の画面は、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
|
BorderIcons |
[biSystemMenu,
biMinimize] | 最大化出来ないように |
BorderStyle | bsSingle | リサイズ出来ないように |
Caption | 郵便番号辞書作成 | タイトルバーに表示されます |
Color | clWhite | 画面色 御自由にどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Icon | (TICon) |
ImageEditorで作成した
アイコンを指定 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
|
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
画面レイアウトは下記のようにしました。
プログラム内を見て頂ければ分かる通り、前回の d010 の Unit1.pasなどと同じ・似たような部分がかなり多いです。一度作ってしまうと他にも利用・転用出来ますので作れば作る程、プログラミングは楽になると思いますが、ある程度まで行くと、より一般的に利用出来るような共通ユニットを用意し、それを使うようにする、という方が良くなってきます。それは置いておき・・・
郵便番号辞書(テーブル「ZIPDIC」)のフィールド構成は
0 | 郵便番号 | ZIP | 文字列(文字数7) |
1 | 住所1カナ | ADK1 | 文字列 都道府県名(半角カナ) |
2 | 住所2カナ | ADK2 | 文字列 市・区名(半角カナ) |
3 | 住所3カナ | ADK3 | 文字列 町村名等(半角カナ) |
4 | 住所1 | ADR1 | 文字列 都道府県名 |
5 | 住所2 | ADR2 | 文字列 市・区名 |
6 | 住所3 | ADR3 | 文字列 町村名等 |
のようにしています。
[起動時]
各種初期設定や、データベース作成・接続を行います。
[郵便番号辞書作成]
この作業を行う場合には、他ソフトで郵便番号辞書にアクセスしていない事を確認してから行って下さい。
(1)データベースに接続しているかどうかを確認
(2)ファイル「KEN_ALL.CSV」があるかどうかを確認
(3)ファイル「KEN_ALL.CSV」を開き、文字数チェック
この間、[Esc]キーを押すと処理を中断するようにします。これは、既に郵便番号辞書を作成しているのにボタンを押してしまった場合の回避手段です。郵便番号辞書作成には結構な時間が掛かってしまうので、ミスタッチによって時間を浪費してしまうのを防ぐ為です。
(4)現在の郵便番号辞書=テーブル「ZIPDIC」を削除します。
(5)新規にテーブル「ZIPDIC」作成します。
(6)ファイル「KEN_ALL.CSV」を開き、データ登録します。
この間の[Esc]キーのチェックは行っていません。途中で中断してしまうと、中途半端な状態の辞書を作ってしまうためです。この処理には結構な時間が掛かってしまうので注意して下さい。
文字列内に、もし万が一「'」「"」がある場合には、それを省きます。関数 QTrim() を UnitV.pas に用意してあります。また、住所3(ADR3)に「以下に」又は「の次に」の文字が含まれている場合は、住所3の内容を NULL にしています。
[テスト検索]
郵便番号の入力欄に郵便番号を7桁形式で入力して[テスト検索]をクリックすると、下の Memo1 に該当データを表示します。
※郵便番号のデータは、事業所用のものもありますが、ここでは扱っていません。
※郵便番号のデータは、日本郵便(http://www.post.japanpost.jp/)にて更新されますから随時、CSVデータをダウンロードして、このプログラムを実行する事によって郵便番号辞書を新しくして下さい。但し、郵便番号とその内容ががらっと変わる場合がありますので注意して下さい。
今回はソースプログラムと実行プログラムを一緒に圧縮しています。上記の郵便番号CSVデータは入っておりません。日本郵便サイトからダウンロードして下さい。プログラムの内容についてはソースプログラムを参照して下さい。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
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
|