|
前頁では「郵便番号辞書」の作成について述べました。これは勿論これまでに作成してきた「住所録」に、郵便番号検索の機能を付けて住所入力の手間を省力化しようとするのが第一目的なのですが、せっかく作った「郵便番号辞書」です。「住所録」に機能を付ける際には「郵便番号検索」画面を追加する事になりますし(※1つの郵便番号で複数の住所が有る場合もありますし、3桁だけ入力して7桁欲しい、というような場合もありますので別画面にするのが何かと都合が良いです)、他にも使える事があるかもしれませんので、ここでは、「郵便番号辞書」を検索するプログラムについて記述します。
前頁で郵便番号辞書(テーブル「ZIPDIC」)を作成しました。そのフィールド構成は以下のようになっています。
0 | 郵便番号 | ZIP | 文字列(文字数7) |
1 | 住所1カナ | ADK1 | 文字列 都道府県名(半角カナ) |
2 | 住所2カナ | ADK2 | 文字列 市・区名(半角カナ) |
3 | 住所3カナ | ADK3 | 文字列 町村名等(半角カナ) |
4 | 住所1 | ADR1 | 文字列 都道府県名 |
5 | 住所2 | ADR2 | 文字列 市・区名 |
6 | 住所3 | ADR3 | 文字列 町村名等 |
さて、「郵便番号」といえば、郵便番号3桁、5桁、7桁から住所を検索する、というのが普通のパターンです。IME(日本語入力)の郵便番号辞書で郵便番号から住所を取得する、という場合もあるでしょう。しかし、IMEの郵便番号辞書が最新状態であるとは限りません。日本郵便サイトを見ても分かるように、よく更新されたりしています。IME作成をしている所からダウンロードするにしても、会社内で複数のPCを使用している場合、その全てに適用せねばならないというのは面倒であるかもしれませんし、最新状態ではなかったりダウンロードそのものが出来なかったりするかもしれません。
そういった場合、クライアント/サーバー型のデータベースソフトがあれば、サーバーの郵便番号辞書を更新するだけで、ほとんどの場合は完了です。各クライアントはサーバーにある郵便番号辞書を参照しますので問題はありません。
データベースソフトであっても、スタンドアロン型の場合にはやはり、各PCのデータベースを差し替える必要がありますので、スタンドアロン型よりはクライアント/サーバー型のほうが1回で済みますので省力化が可能です。
さて、郵便番号と辞書を扱うようなプログラムには、どんなものがあるかを考えてみます。まずは「住所録」ですね。これには「ハガキ印刷ソフト」や「アンケート集計プログラム」なども含まれるでしょう。業務ソフトでも、取引先や客先等の住所を登録するような場合には必要となってきます。住所=家=不動産、という事で、不動産関係のソフトとか、地図関係のソフトなどでも利用されるかもしれません。
普段、郵便番号は分かっているのだけれども住所が分からない、という場合よりも、実は、住所は分かっているんだけれども郵便番号が分からない、という場合の方が多いかもしれません。例えば、普段使っているソフトで郵便番号を入力しないといけないケースや、ハガキや封書を出す時に郵便番号が分からないというケースです。そういう場合は郵便局で貰ってきた小冊子を開いて目で探したりしますが、紙になっているから手軽、という面はありますが、手間である場合も多いです。そういう時にPCで検索すると便利かもしれません。
また、「○○市って、どこの都道府県だっけ?」とか
「△△町って、どこの市だっけ?」などのような事もたまにありますね。そういった場合にもPCで検索すると便利かもしれません。
更に、「この住所は一体、何て読むんだ?」のような事もあるかもしれません。日本郵便のCSVデータには読みカナも入っていますからこれが利用出来るかもしれません。
プロジェクト「d012」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「d012」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | d012−郵便番号辞書の検索 |
[アプリケーション]頁
アイコン |
ImageEditorで作成した
アイコンを指定 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\db\d012 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\db\d012」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\db\d012」の中に「d012.dpr」として保存
◆
Form1の画面は、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
|
BorderIcons |
[biSystemMenu,
biMinimize] | 最大化出来ないように |
BorderStyle | bsSingle | リサイズ出来ないように |
Caption | 郵便番号辞書作成 | タイトルバーに表示されます |
Color | clWhite | 画面色 御自由にどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Icon | (TICon) |
ImageEditorで作成した
アイコンを指定 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
|
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
画面レイアウトは下記のようにしました。
画面やプログラム内を見て頂ければ分かる通り、前回の d011 の Unit1.pasを利用している部分がかなり多いです。データベース作成、テーブル作成やテーブル削除は不要なので外しています。新しく「住所検索」と「住所かな検索」を追加しています。
検索は SQL の SELECT文で行います。
ただ単に
としただけでは、全てのデータを閲覧するという事になります。これを WHERE節の指定によって絞り込みを行います。
SELECT * FROM ZIPDIC WHERE (条件式); |
この条件式をどのように記述するかで、どのように絞り込むのかが決まります。フィールドが数値のものであれば比較演算子は使えますが今回は文字列ですので、LIKE演算子でワイルドカード「%」を使って検索します。例えば、
SELECT * FROM ZIPDIC WHERE ZIP LIKE '100%'; |
とすれば、郵便番号が「100〜」のものが全て閲覧出来るようになります。
SELECT * FROM ZIPDIC WHERE ZIP LIKE '%0000'; |
とすれば、郵便番号が「〜0000」のものが全て閲覧出来るようになります。
SELECT * FROM ZIPDIC WHERE ZIP LIKE '%00%'; |
とすれば、郵便番号が「〜00〜」のものが全て閲覧出来るようになります。
ここでの郵便番号検索は
SELECT * FROM ZIPDIC WHERE ZIP LIKE '〜%'; |
のようなスタイルで行うようになっています。
次に住所の検索ですが、住所の検索は「大阪」と検索する事もあれば「大阪府大阪市」のように検索する事もあります。郵便番号辞書(テーブル「ZIPDIC」)では、都道府県の住所1、市区名の住所2、町村名の住所3、とバラバラになっていますから、それぞれに対して検索キーワードを指定する事は出来ません。検索キーワードを分解すれば可能なように思えますが、住所の記述パターンは色々ありますので「市」「区」「町」等で切り出しをするだけでは不十分となってしまいます。それではどうするかというと、データベースの方で文字列を結合した結果に対して LIKE演算子を使うという風にします。文字列の結合は演算子「||」を使います。
SELECT * FROM ZIPDIC
WHERE (ADR1 || ADR2 || ADR3) LIKE '%〜%'; |
のようになります。
次に住所かなでの検索ですが、上記と同様に
SELECT * FROM ZIPDIC
WHERE (ADK1 || ADK2 || ADK3) LIKE '%〜%'; |
のようになりますが、これら ADK1、ADK2、ADK3は、半角カナで登録されています。すると、キーワード入力も半角カナで行わないといけなくなりますが、やはり、全角かなを使いたくなります。そのため、全角→半角に変換する関数 ZenToHan() を用意しています。この関数では余り長い文字列に対応させていませんが(最大512文字)、それだけ長い住所というのも無いだろうという事で済ませています。入力欄 Edit5・Edit6 のMaxLengthプロパティは 255 にしてあります。
本プログラムは、前回プログラム「d011」を実行し、既に郵便番号辞書を作成した、という事を前提としています。もしこれを行っていない場合には、検索は出来ませんので注意して下さい。
今回はソースプログラムと実行プログラムを一緒に圧縮しています。プログラムの内容についてはソースプログラムを参照して下さい。
|
|
バッチファイル
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
|