みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ほぼ、初心者の者です。また助けて頂きたく投稿しました。
Win7 FM11です。
熊本市在住なのですが、近年、政令都市となった為に、既存の住所の町名の頭に区名が入ることになりました。
熊本市湖東1丁目→熊本市(中央区)湖東1丁目みたいな感じです。
やりたいことは、既存の住所録DBに「区名」フィールドを追加し、町名から自動的に区名を挿入する事です。
市のHPに「町名区名対照表」がUPされているので、それを基にデータベース(町名区名対照表DB)を作成し、「町名」でリレーションを貼れば、簡単な話だったのですが、問題が1点あります。
それは、区を跨がっている町が何カ所かあるのです。これを正確に分類する方法が考えつきません。
話を整理しますと。
① 既存の住所録DB(フィールド4っ)
町名 本番 枝番 区名(追加したフィールド)
---------------------------------------
例) 湖東1丁目 1番 61号 ※この場合だと(中央区)
② 町名区名対照表DB(これが問題!どう作れば良いか分からない)
市のHPから配布されている資料は下記の様な感じです。
町名 本番 枝番 区名
--------------------------------------
湖東1丁目 1番 1~14号 中央区
16号
61~73号
--------------------------------------
湖東1丁目 1番 15号 東区
17~60号
2~15番 全域
--------------------------------------
湖東2丁目 全域 東区
--------------------------------------
湖東3丁目 全域 東区
--------------------------------------
湖東2丁目、湖東3丁目のようにすべて全域だと何も問題ないのですが、湖東1丁目のように区が本番や枝番まで跨がっていると、分類が複雑です。
すべての住所を力業で、データベース化すれば問題ないのでしょうが、大変な作業量になり、手作業でチェックした方がまだ楽です。
町によっては、本番が~2000番とかもあるし、現実的に無理です。
町名区名対照表DBどのようなフィールを作れば良いのか?またどのような計算式で区名を抽出すれば良いのか?
又は他に何かうまい方法は無いものでしょうか?
ご教授よろしくお願いします。
データをダウンロードして、
FMファイルにしてみました。
不要レコードを削除して、正味1067レコードでした。
町名・区名が空白なものは、
ひとつ前のレコードの値で全置換で入力。
でいいですね。
問題は番地等ですが、、
「全域」と番地がひとつだけのものが大半で、
範囲「〜」が有るのは140レコードでした。
それらを処理するために、まず
例えば
532番地1~1272番地89
これは
532番地01〜1272番地89
の様に番地以下の桁数をそろえます。
また、
23番19号~25号
このように省略されているものは省略部分を補填し
23番19号~23番25号
とします。
この様にフィールドの中で、前後に一貫性を持たせます。
これらは計算をこねくり回せば出来るでしょうが、
その間に手入力で出来ちゃうのでは。
そこまで出来たら、
下限フィールドと上限フィールドを作り、
値の前後を数値化して入力します。
最初の例では
下限 53201
上限 127289
の様に入力します。
これは計算で出来ますね。
「全域」は
下限 1
上限 10^10
ひとつの番地は
下限・上限共にその値
の様な値でいいでしょう。
こうして、
利用する方で
番地以下を同様に数値化したフィールドを作り、
町名
and
上限と下限の範囲
で照合すればいいですね。
Offline
チポ様、早速のご回答有難う御座います。
なにせ素人同然なもんで、内容がまだ良く把握できてませんが、教えて頂いたことをよく読んで勉強してみます。
毎回、助けて頂き感謝します。
解決したら、また報告させて頂きます。
チポ様
教えて頂いたとおりに作業を進めていったら、ついに出来ました。内容を理解するのに少々手間が掛かりましたが何とか解決する事ができました。
本当に有難う御座います。
番地を数値化するという発想はすごいですね。というか私が素人過ぎるだけなのかもしれませんが(笑
いやー!またまた良い勉強になりました。
ただ、最後の「利用する方で番地以下を同様に数値化したフィールドを作り、 町名 and 上限と下限の範囲で照合すればいいですね。」という部分なんですが、ここが一番悩んだ所なんですが
素人ぽい、ゴリゴリの計算式でやってみました。
まずは、町名区名対照表DBの方に、「区を跨がる町」と言うフィールドを追加して、その町には「★」マークをいれました。
計算式の最初で「★」以外はそのまま区名を入れるようにして、それ以外をCase関数でゴリゴリ照合させて解答を見つけ出す様にしてます。
-------------------------------------------------
Case (
//区を跨がる町以外なら、そのまま区名を入れる。
GetNthRecord ( 町名区名対照表::区を跨がる町 ;1 ) ≠ "★"; GetNthRecord ( 町名区名対照表::区名 ;1 );
//ポータルの行を順番にチェックしていく。※最大50行
(数値化された番地 ≥ GetNthRecord ( 町名区名対照表::下限 ;1 )) and (数値化された番地 ≤ GetNthRecord ( 町名区名対照表::上限 ;1 )) ; GetNthRecord ( 町名区名対照表::区名 ;1 );
(数値化された番地 ≥ GetNthRecord ( 町名区名対照表::下限 ;2 )) and (数値化された番地 ≤ GetNthRecord ( 町名区名対照表::上限 ;2 )) ; GetNthRecord ( 町名区名対照表::区名 ;2 );
.
.
.
(数値化された番地 ≥ GetNthRecord ( 町名区名対照表::下限 ;23 )) and (数値化された番地 ≤ GetNthRecord ( 町名区名対照表::上限 ;23 )) ; GetNthRecord ( 町名区名対照表::区名 ;50 )
)
--------------------------------------------------
こんな感じですが、これで良かったのでしょうか?
もっとスマートなやり方があるのだろうと思いますが。まあ、結果オーライなんで、問題ないんですが。(笑
これからも更に精進して参ります。
本当に有難う御座いました。
また、宜しくお願いします。
最後の計算式間違ってました(笑
.
.
.
(数値化された番地 ≥ GetNthRecord ( 町名区名対照表::下限 ;50 )) and (数値化された番地 ≤ GetNthRecord ( 町名区名対照表::上限 ;50 )) ; GetNthRecord ( 町名区名対照表::区名 ;50 )
ずいぶん難しく考えましたね ^^;;
リレーションを使って持ってこられますよ。
利用する方のテーブルでも番地以下を数値化するフィールドを作ります。
リレーションを
利用するテーブル 町名区名対照表DB
町名 = 町名
and
番地数値 >= 下限
and
番地数値 <= 上限
これで区名を参照できます。
番地以下の数値化は「番」「番地」の下に3桁のものが有る様ですので、
すべて3桁で桁合わせした方がいいですね。
Offline
チポ様
>リレーションを使って持ってこられますよ。
あらら、ホントだ。なーんだ、リレーションってこんな細かい設定が出来るんだ。はじめて知りました。
ゴリゴリの計算式なんてまったく不要なんですね。目からウロコです。また、いい勉強をさせて頂きました。
大変有難う御座いました。
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 544.38 KiB (Peak: 564.92 KiB) ]