過去の桐井戸端BBS (桐ver.8)
9539 郵便番号の表引き ezer 2001/01/29-02:20
郵便番号の住所からの表引きの件でこの様にしたのですが
この様な方法でも良いのかどうか分からないのでお教え下さい。
ファイル名が 顧客.TBL で住所がたとえば 東京都東村山氏秋津町123-123-123
の様な住所から郵便番号を表引きする時 郵便番号の表 yubin.tbl のデータは
〒番号     住所 
189-0001 東京都東村山市秋津町
189-0021 東京都東村山市諏訪町

の様にが登録され、住所順にて並べ替えしてあるとします。
表引きすると 189-0021 東京都東村山市秋津町ではなく必ず一つ後の189-0021
東京都東村山市諏訪町 のデータが表示されてきます。
これは当然仕方がないものとして諦めて使っておりました。
ですが間違って入力してしまう恐れもあり正確に表示されないかなと思っておりました。
そして次のような方法を考えたのですがこの様な方法でもいいのかお教え下さい。

顧客.TBL にダミーの項目を16個程作り(多分この位あれば良いかなと思い)
[1] #TLU(#SSTR([住所],1,5),=,"YUBIN.TBL",[住所],[〒番号])
[2] #TLU(#SSTR([住所],1,6),=,"YUBIN.TBL",[住所],[〒番号])
[3] #TLU(#SSTR([住所],1,7),=,"YUBIN.TBL",[住所],[〒番号])

顧客.TBLの〒番号項目にの挿入初期値及び編集初期値に
#COND([16],[16],[15],[15],[14],[14],[13],[13],[12],[12],[11],[11],
[10],[10],[9],[9],[8],[8],[7],[7],[6],[6],[5],[5],[4],[4],[3],[3],[2],
[2],[1],[1],1,#U)

の様な計算式を書きました。
実は本当のねらいは宅配便のデータの方なのですが?
こちらの方はデータが少ないし正確に早く表示されるのでこの方法を考えました。
桐初心者の私なのでこの様な方法になり書き方もいい加減なのかもしれませんが
よろしくお願いいたします。ezerより

9541 Re:郵便番号の表引き 悲しげ 2001/01/29-10:56
記事番号9539へのコメント
どもっ、ezerさん
このような場合は項目計算式の「#表引き」関数ではなく、
「表引き条件」(項目属性で「表引き」タブから)を使ってはいかがでしょう?
この時の使用索引を、敢えて住所「逆順」にすると、
結構使えるとどなたかが云っていたと記憶します。

9544 Re:郵便番号の表引き 今村 誠 2001/01/29-14:42
記事番号9539へのコメント
ezerさん初めまして宅配のシステムをお考えのようですね。
郵便番号を表引きで入力されるのでしたら、住所が決まった形で
入力されていないと表引きできません。
例えば 沖縄県那覇市壷川          ……1
や 愛知県海部郡蟹江町大字蟹江新田字上芝切 ……2
等は、一見まともなデータに見えますが、1は壺川が
郵政省のデータには登録されています。
2は大字と字が必要のないデータのようです。
沢山の項目の表では、データの件数が多くなると表が重くなるので、
悲しげさん御提案のように表引きにされた方がすっきりすると思います。
また住所を1と2に分けることをお勧めします。
宅配コード表もお持ちのようですが訂正するときは
どうしてらっしゃいますか?
ご自分で訂正されるのでしょうか。
私も昔は郵便番号と一緒に入れていましたが、今は、電話番号と一緒にしています。
番地や建物名を別項目にすれば、9割まではヒットすると思います。
1丁目や2丁目或いは京都市は無理だと思います。
時代の流れとして、現在ある3340前後の市町村を将来は、1200前後にするようですので、
訂正が容易にできるように県+市町村で住所1にして
町までを住所2、番地建物を住所3でも表引きするときに、住所1+住所2を
計算項目で持っておけば、後々市町村が増減しても、対応が早いのではと思っております。
宅配システムをホームページに掲載しています。気が向いたら覗いてみてください。

9549 Re:郵便番号の表引き ezer 2001/01/29-17:07
記事番号9541へのコメント
悲しげさん 度々の質問にお答え下さりありがとうございました。

>このような場合は項目計算式の「#表引き」関数ではなく、
>「表引き条件」(項目属性で「表引き」タブから)を使っ
>てはいかがでしょう?
>この時の使用索引を、敢えて住所「逆順」にすると、結構
>使えるとどなたかが云っていたと記憶します。

元々は表引き条件にて使っていたのですが一つ後のデータが表引きされたので
この様な方法を考えてしまったのです。
もう一度表引き条件で住所を辞書逆順でしてみましたら、正確に表引きされてきます。
本当にありがとうございました。
この方法でやっていきます。また、質問をさせていただきます。その節はよろしく
お願いいたします。

ezerことtanakiより

9550 今村さん ありがとうございました。 ezer 2001/01/29-17:15
記事番号9544へのコメント
今村 誠さん ありがとうございます。

ホームページの方をみてみました。
参考にしてみたいと思います。
ご丁寧にご説明下さりありがとうございました。

ezerことtanakiより

9555 郵便番号逆引きは簡単ではありません 佐田 守弘 2001/01/29-23:30
記事番号9539へのコメント
ezerさん
行いたいのは、住居表示から郵便番号を表引きする事ですね。
私はこれを郵便番号逆引きと読んでいます。
●使っている郵便番号データは
初めに確認させて下さい。
お使いになっている郵便番号データはどの様にして入手されたものですか。
私が推定しますに次のどちらかだと思います。
@ゆうびんホームページに掲載されているCSVデータをそのまま桐に読み込んだもの
Aいずれかのソフトの付属の優美番号データを使っている場合
実はどちらも問題があります。
まず郵便局のCSVデータですが、これはこのまま表引きで利用できるデータではありません。
詳しくは私のサイトの
http://www.ne.jp/asahi/m.sada/kiri/KIRI7/K7_ZIP.html
などを見て頂ければ分かると思います。
試しに、「京都府京都市下京区六条通烏丸西入」といった住所が正しく逆引きできるか
確かめてみればすぐ分かります。

市販のソフトその他に付属の郵便番号データは、表引き用に編集されているかも知れませんが、
いつ作られたデータであるかが重要です。
ゆうびんホームページを見れば分かりますが、郵便番号は毎月少なからず更新されています。
古い郵便番号では使い物にならない場合もあります。
ただし、住所データの方が古く、そのために逆引きできない例も少なくありませんが。

●郵便番号逆引きのアルゴリズム
私もいろいろ考えてみましたが、一般的な表引きではできないと思います。
前提としては、郵便番号データは最新である事、住所の記述は、郵便番号からの表引きで入力されている事、です。
ただしその方法はあります。とは言え、それを解説するには相当のページ数が必要なので、
ここでは、アルゴリズムのあらましだけを申し上げます。
まず住所の文字列で郵便番号データを検索します。
見つかったら、その郵便番号を候補とします。
見つからない場合には、住所の文字列を下1文字切り詰めて検索を繰り返します。
見つかった郵便番号の候補値を使って郵便番号表引きを行い、妥当性を確かめます。

●宅配便コード
宅配便コードが付いた郵便番号データは、確かNIFTY-ServeのFQUIZの北川さんが提供されていたと思います。

佐田守弘(KS-00119)
9558 Re:郵便番号の表引き kazu 2001/01/30-01:20
記事番号9539へのコメント
初めまして。kazuと申します。初心者ですが考えてみました。
ezer様のされていることを式にしてみました。
文字列の変数を &文字5〜&文字17まで宣言してから

 表 "住所.tbl"
 置換 [郵便番号]=#計算(\
      #代入(&文字17,#表引き(#部分列([住所],1,17),=,  \
                     &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字16,#表引き(#部分列([住所],1,16),=,  \
                     &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字15,#表引き(#部分列([住所],1,15),=,  \
                    &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字14,#表引き(#部分列([住所],1,14),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字13,#表引き(#部分列([住所],1,13),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字12,#表引き(#部分列([住所],1,12),=,  \
                     &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字11,#表引き(#部分列([住所],1,11),=,  \
                     &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字10,#表引き(#部分列([住所],1,10),=,  \
                    &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字9,#表引き(#部分列([住所],1,9),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
     #代入(&文字8,#表引き(#部分列([住所],1,8),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
     #代入(&文字7,#表引き(#部分列([住所],1,7),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
      #代入(&文字6,#表引き(#部分列([住所],1,6),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
     #代入(&文字5,#表引き(#部分列([住所],1,5),=,   \
                    &郵便番号簿,[住所],[郵便番号])),\
     #COND(\
        &文字17<>#U,&文字17, \
        &文字16<>#U,&文字16, \
        &文字15<>#U,&文字15, \
        &文字14<>#U,&文字14, \
        &文字13<>#U,&文字13, \
        &文字12<>#U,&文字12, \
        &文字11<>#U,&文字11, \
        &文字10<>#U,&文字10,\
        &文字9<>#U,&文字9, \
        &文字8<>#U,&文字8, \
        &文字7<>#U,&文字7, \
        &文字6<>#U,&文字6, \
        &文字5<>#U,&文字5, \
        1,"???"\
         ))

9562 Re:郵便番号逆引きは簡単ではありません ezer 2001/01/30-13:40
記事番号9555へのコメント
佐田先生 いつもありがとうございます。
先生のホームページ等を読んでみているのですが。郵便番号の表引きが簡単ではないことは多少わっかていたのです。
また、変なことを考えてしまった本当の理由は
宅急便の着店コードがヤマ*さんから郵便番号と住所をもとにした
csvのデータが変更するたびにいただいています。
住所からの着店コードはデータ量が3000件ほどしかなく住所をもとにした表引きにて
データが表示されないものは郵便番号から表引き出来ればよいな?
などと簡単に考えてしまった訳です。
郵便眼号のデータは必ずしも必要なデータではないのですが。
もし簡単に(表現が適切でないかもしれません)出来ればいいなと思い。
この様な事を考えてしまったわけです。
実は悲しげさんからお教えいただいた住所の逆引きの方法で宅急便の着店コードの表引きはほぼ解決されそうなのですが。
いかんせん住所の方はかなり正確さを欠いた表引きになることが実験して分かりました。 
今回は郵便番号の住所からの表引きによる入力は入力補助程度に考えて使ってみようと思っています。

>●郵便番号逆引きのアルゴリズムの件

難しいことは分かりませんが私の小さな頭で考えた方法も先生のこの方法に近い考え方だったのかもしれません。
(但し私は知識が伴わず。理解できないところが多々ありますが?)
>
>●宅配便コードの件
JPZIPですね みてみました。
大変参考になりました。
>
今回も丁寧なご説明ありがとうございました。
又よろしくお願いいたします。
9563 kazuさん ありがとうございました。 ezer 2001/01/30-13:48
記事番号9558へのコメント
kazuさんありがとうございます。
>初めまして。kazuと申します。初心者ですが考えてみました。
とんでもございません。私は超初心者です。

そうですねこの様な式にして置換すれば項目をわざわざ増やす必要はなかったのですね。
桐をまともに勉強せずにすると。私のような桐超初心者が出来上がることが分かりました。
まず、マニュアル、そしてここのBBSをよく読むことが必要だと気づかされました。
今回は丁寧な説明をありがとうございました。
又、よろしくお願いいたします。

9565 Re:郵便番号の表引き めあ 2001/01/30-18:03
記事番号9539へのコメント
初めまして。桐愛用者の一人としていつも拝見させていただいています。

桐は Ver.5 の頃から顧客管理に使用していますが、住所の扱いには常に苦労させられています。
今回、話題になっている住所から郵便番号を表引きに関しましても、
誤字、類字などによる住所の表記の違いや、市区町村の併合による変更などにより
簡単に表引きするだけでは対応できません。

私も最初は桐だけで対応を……と考えましたが、満足のいく結果を出すことができなかったため、
現在は住所を自動解析するプログラムを用いています。

桐とは関係のない話になり申し訳ありませんが、私の考えとしましては桐だけで全て行うのではなく、
桐で無理なところは他のプログラムで補うのも一つだと思っています。

今村さんの例にあった住所をこのプログラムで処理すると、

900-0025,47201,沖縄県,那覇市,,壺川,,,,
497-0044,23425,愛知県,海部郡蟹江町,,蟹江新田,上芝切,,,

というように郵便番号を付加すると同時に、住所を分解することもできます。

住所のチェックに用いるデータは全国の主要な字まで対応しており、類字、誤字に関しても
独自のテーブルを用いることにより多少の入力ミスがあっても対応することができます。

プログラムはアセンブラ(32Bit)により作成されているため、1秒間に数千件のデータを処理することができます。

今は独立して SOHO として細々とやっているため、このプログラムも私の請け負っている
顧客管理に使用しているだけで、きちんとした資料もありませんが、
同じような問題を抱えている人がいると知り、紹介させていただきました。
もし、興味がございましたら、メールでご連絡いただければ、対応させていただきます。

掲示板の主旨とは少し異なってしまい、申し訳ありませんでした。

9569 めあさん ありがとうございました。 ezer 2001/01/30-21:24
記事番号9565へのコメント
めあさん ありがとうございました。
今回は実は郵便番号の方が主要な目的ではなく宅急便の着店コードが主要な目的だったのです。
その為、着店コードはほとんど表引きにてOKでした。郵便番号は表引きの辞書逆引きにて
対応することにいたしました。

住所の解析プログラムとはすばらしい限りです。興味はありますが、
今回のシステムで費用をかけるわけにもいかないので。
次の機会にお願いするかもしれませんその節はよろしくお願いいたします。

9575 表引きで1つ後を引き当てる理由 toshi-chan 2001/01/30-22:57
記事番号9539へのコメント
ezerさん、こんばんは。
私も以前に表引きで1つ後をヒットして困ったことがありました。
その時調べたことを紹介します。わかりやすくするため、
人の氏名の事例に置き換えます。

次のような表があります。辞書順で並べ替えてあります。

  氏名     ふりがな
−−−−−−−−−−−−−
  田代     たしろ
  多田     ただ
  田中     たなか

別の表に「氏名のよみ」を数文字入力し、上記の表の「ふりがな」項目を検索し、
「氏名」を取得しようと考えたわけです。このとき、カタカナで「タタ」と入力すると
「多田」をヒットし、「タダ」と入力すると「田中」をヒットしてしまいました。

この理由は辞書順の並べ替えの仕様に潜んでいます。
辞書順の場合、データ全体を次のように並べ替えます。

     特殊記号→数字→英字→仮名文字→漢字

(1)@ 仮名文字の中では、五十音順。
  A 同じ読みの時は次の通り。
     清音→濁音→半濁音
  B 清音どうし(または濁音どうし、半濁音どうし)のときは次の通り。
     ひらがな→カタカナ
(2)@ 英字のなかでは、ABC順。
  A 同じ文字なら
      大文字→小文字
  B 大文字どうし(または小文字どうし)のときは
      全角→半角

★「タタ」と入力した場合
 [ふりがな]に完全一致のデータがないため、辞書順の先頭一致で検索します。
 前述の規則によって「タタ」の位置は「たしろ」と「ただ」の間になります。
 桐は本来の位置の次の「ただ」をポイントし画面表示します。

★「タダ」と入力した場合
 [ふりがな]に完全一致のデータがないため、辞書順の先頭一致で検索します。
 前述の規則によって「タダ」の位置は「ただ」と「たなか」の間になります。
 桐は本来の位置の次の「たなか」をポイントし画面表示します。

****************************************

ezerさんの場合は、漢字と数字混ざりの事例ですが、この考え方がそのまま当てはまるようですね。
辞書逆順で並べ替えると目的のレコードをヒットすることも容易に想像できます。

****************************************

◎以前の桐は、値条件の表引きの際は完全一致で検索していたように聞いています。
 たしかver4くらいから現行の先頭一致になったはずです。そのために起こる現象ですね。
 私の事例では、カタカナを入力してひらがな項目を検索していたのが原因になったわけです。

9578 toshi-chanさん ありがとうございました。 ezer 2001/01/31-00:11
記事番号9575へのコメント
toshi-chanさん ありがとうございました。

良く分かりました。つまり桐はちょうど真ん中(私のヒットと桐のヒットとの見解の違いですね。)
をヒットしていたわけですね。
詳しくご説明下さりありがとうございました。
また、よろしくお願いいたします。

戻る