** 郵政省郵便番号データをつないでばらす 「つなばら処理」改3 **        〜〜〜またの名を「ガメラの行進」〜〜〜 郵政省郵便番号データ、地域名・地域名かなが複数レコードにまたがっていても 実は1データであるものがあるという信じられないセンスにあきれたことをきっ かけに作成しました。KEVを使う必然性かないのでまたまた CMDです。 使い方:まず郵政省のサイト(http://www.postal.mpt.go.jp/)から ken_all.lzhをダウンロードし、つなばら.CMD等が入っているのと同じフォルダ に解凍します。表操作してもらおうかとも思いましたが、CMDですべて取り込み ましたので、つなばら.CMDを動かすだけで BASEDATA.TBLができあがります。 !!注意1!! 読み仮名データの促音・拗音を小書きで表記したもの(例:ホ ッカイドウ)をダウンロードしてください。読み仮名データの促音・拗音を小書 きで表記しないもの(例:ホツカイドウ)では一部データに狂いを生じます。 !!注意2!! 郵政省サイトには「事業所の個別郵便番号 ダウンロード」も ありますが、データの形が違いすぎるので今回は非対象としています。 !!注意3!! 大量データを処理しますので HDには200MB程度の空きが必要で す。KENREAD.TBLは完全ワークファイルですので、処理後削除してしまってもか まいません。バックアップもこの表に関しては取らない設定にしてあります。 BASEDATA.TBLとは、みればわかると思いますが、郵政省データを最低限データベ ースらしい形式に変換したものです。原始データと位置づけていますので、使い やすいように加工してお使いください。 「つなぎ」と「ばらし」、その他事前・事後処理から成ります。 「つなぎ」は先頭から1レコードずつ調べ、町域名に「(」を含み、かつ、「)」 を含まないレコードがあった場合、データを変数に取り込むとともに「不要」マ ークを立てます。次レコードが「(」を含んでおらず、かつ、「)」を含まない とき、データを連結し「不要」マークを立てます。「(」を含んでおらず、かつ、 「)」を含まないときは、データを連結するが、「不要」マークは立てず、表デ ータを訂正します。(「かな」も同様に処理しています。以下同様。) 並び順は重要(と思うんですが・・・?)ですので、CSV読込後、即、#連番で 置換します。この手のは、私の流儀では、[順メイン][順サブ]の2項目を追加し ます。これ使おうかという人ならその心はわかりますよね。以後、必要都度振り 直します。(時間がかかるのが嫌なので最少限にしています。) その他、事前処理で行っている主なこと。 KENREAD.TBLの存在チェックとあれば削除。 KENREAD.YOBの存在チェックとあれば KENREAD.TBLとしてファイル複写。 BASEDATA.TBLの存在チェックとあれば削除。 BASEDATA.YOBの存在チェックとあれば BASEDATA.TBLとしてファイル複写。 KEN_ALL.CSVの存在チェック。 旧郵便番号が空白文字列を含んでいるのでこの除去。 町域名「〜一円」、市区町村名まででよいのでクリア。ただし「一円」なる町域 名あり。 町域名「以下に掲載がない場合」、どう使うかは別問題として、こんなの先頭に あってもどうしようもないので、市区町村の末尾にまわし、「以上に掲載のない 場合」にする。 「ばらし」では、町域名に「(」も「、」も含まない場合、そのまま書き出しま す。「(」は含むが「、」は含まない場合、「(」「)」を取って書き出します。 「(」も「、」も含む場合、いったん「(」前までを町域名1、「(」の後ろを 町域名2とするとともに、「(」「)」を抜きます。町域名2は「、」の1文字 前までを町域名1に連結して書き出しながら作業用変数から落としていきます。 連番を振り直して終了です。 この一括処理作成にあたっては、佐田さんの「名刺管理」に触発されるところ、 勉強させていただいたところ大であります。特に「ばらし」はほとんどいただい たまま同然。 正直なところ、郵政省データの「からくり」に気づくまで佐田さんのロジックが 理解できませんでした。そのせいで、「名刺管理」では一回でつなぎつつばらす というエレガントな処理となっていますが、私のは「無骨」そのものとなってお ります。(^^;; 佐田さん、ありがとうございました。この場を借りましてお礼申し上げます。 m(_ _)m 佐田さんのサイトのURLは次です。 http://www.m-sada.com/ その他ちょっとだけコメント。 本番に入るとな〜んにも表示されないととても心細く、進行状況がやはり知りた い、しかし、12万件は半端な数字じゃなく、1件ごとだと時間がかかってしか たがありません。そこで、「つなぎ」と「ばらし」については1000件ごとの カウントアップとしております。このあたりはこのみでカスタマイズしてくださ い。それ以外の部分も処理状況を表示するようにしました。 「ばらし」の区切り文字が本当に読点かという心配があろうかと思いますが、 12万件で例外がないとは、元データ作成側でチェックしているものと確信しま す。よって、このチェックは入れていません。 私のデスクトップでの処理時間は次のとおりです。 事前処理:10分 つなぎ:  9分 ばらし: 26分(計45分) テスト機CPU  :無印PENTIUM 167MHz テスト機メモリ:32MHz テスト機HD  :2.44GB 佐田さんのサイトに「桐ver.7の表引きに利用する郵便番号データ」というペー ジがあります。大変貴重なノウハウが公開されており、ぜひ参照されることをお 薦めします。「桐ver.7活用ガイド」メニューからお入りください。 さて、それを踏まえたうえで、さらにどう加工するかですが、う〜ん、「1〜 19丁目」に対応するのがせいぜいのような気がします。検索する意欲がわかな いようなデータは片っ端から削除するのがノウハウかと思われます。 著作権というのもおこがましいのですが、一応留保します。使用・改造・自作へ の組み込みについて制限するつもりはありません。ただし、これにより損害を生 じても賠償には応じられません。もちろん、現在の郵政省のデータ(2000.8.10 現在)で一応正常に動くようだという確認はしていますが、将来のデータに対し てどうかはわかるわけありません。(まずだいじょうぶでしょうけど。)サポー トの義務も負いませんが、ミスを指摘いただければ、修正はすると思います。 それから、データ構造としてなっていないとかいう非難は、私にではなく郵政省 のほうにお願いします。 感想をよせていただければ嬉しいです。                            AUG. 2000 by 宮城                       a-miyagi@kfc.kawatetsu.ne.jp                           miyagi@mx1.kct.ne.jp 改1要旨 ・町域名かなに半角ピリオドが混じっていた。 ・京都市のデータで町域名かなに子字の記載が抜けているものがあった。 ・子字を括弧でくくり忘れているデータがあった。 ・町域名かなに半角読点が洩れているもの・めためたのものがあった。 ・「1、2丁目」、数字が読点区切りで羅列、最後に「〜番地」等、読点ばらし  が不適当なデータがあった。ただし、「丁目」「番地」を含めばみなそうかと  いうと京都にはばらしたほうがいいと思われるデータがある。 ・そもそも、丁目・番地が混在し「以外」まである町域名の一致検索を完全に断  念した。括弧も残っていたほうが見やすいものもあると思った。 ・その他、完全なバグ対応など。 ということで修正をしました。全部ロジックで組めないこともないのですが、既 にほぼ倍の規模に膨らんでしまいましたので、修正内容を画面に表示したうえで 会話にしています(一部は自動化あり)。しかも、処理の都合上断続的に入りま す。所要時間は全件データでほぼ45分と変わりません。まあ、マンガでも読み ながら「ガメラの行進」につきあって下さい(経過表示=亀。これ、どうみても ガメラ。)。 最後に、明細表示フォームは800x600用になっております。1024x768が可能なか たは、明細表示.wfmのファイル名を適当に変え、明細表示大.wfmのファイル名か ら「大」を取ってお使い下さい。 最後の最後に、メッセージボックスの表示を正常化するために、環境設定→一括 →高度な設定→「印字コマンドでコントロール文字を展開する」にチェックが入 った状態でお使い下さい。 改2要旨 ・明細表示フォーム、見づらいので入力支援を考えてみました。結果、めでたく  イベント処理つきV8正当派となりました。 ・バグがあり、管理工学 堀川さんのお世話になりました。堀川さんに大感謝。  m(_ _)m 教訓:安易な既存オブジェクトコピーはファミリーにご用心。 改3要旨 ・郵便番号、ハイフンなんか入れない方が入力は楽と思っていましたが、要望強  く、そうなると小手先で逃げると、郵便番号検索処理で思わぬ影響が出たため、  「つなばら」から直すことにしました。こんなふつうの人は一回動かせばいい  ぐらいのをぱたぱた改定してごめんなさい。m(_ _)m ・郵便番号検索とダウンロードをまとめました。                            SEP. 2000 by 宮城