初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2016-03-11 12:15:08

松田
Guest

複雑な分類の方法

ほぼ、初心者の者です。また助けて頂きたく投稿しました。
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どのようなフィールを作れば良いのか?またどのような計算式で区名を抽出すれば良いのか?

又は他に何かうまい方法は無いものでしょうか?

ご教授よろしくお願いします。

#2 2016-03-11 14:49:09

チポ
Member

Re: 複雑な分類の方法

データをダウンロードして、
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

#3 2016-03-11 15:37:04

松田
Guest

Re: 複雑な分類の方法

チポ様、早速のご回答有難う御座います。

なにせ素人同然なもんで、内容がまだ良く把握できてませんが、教えて頂いたことをよく読んで勉強してみます。
毎回、助けて頂き感謝します。

解決したら、また報告させて頂きます。

#4 2016-03-14 20:39:11

松田
Guest

Re: 複雑な分類の方法

チポ様

教えて頂いたとおりに作業を進めていったら、ついに出来ました。内容を理解するのに少々手間が掛かりましたが何とか解決する事ができました。
本当に有難う御座います。

番地を数値化するという発想はすごいですね。というか私が素人過ぎるだけなのかもしれませんが(笑
いやー!またまた良い勉強になりました。

ただ、最後の「利用する方で番地以下を同様に数値化したフィールドを作り、  町名  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 )

)
--------------------------------------------------

こんな感じですが、これで良かったのでしょうか?
もっとスマートなやり方があるのだろうと思いますが。まあ、結果オーライなんで、問題ないんですが。(笑

これからも更に精進して参ります。

本当に有難う御座いました。

また、宜しくお願いします。

#5 2016-03-14 20:52:20

松田
Guest

Re: 複雑な分類の方法

最後の計算式間違ってました(笑



(数値化された番地  ≥  GetNthRecord ( 町名区名対照表::下限 ;50 )) and (数値化された番地  ≤  GetNthRecord ( 町名区名対照表::上限 ;50 )) ; GetNthRecord ( 町名区名対照表::区名 ;50 )

#6 2016-03-15 09:09:52

チポ
Member

Re: 複雑な分類の方法

ずいぶん難しく考えましたね ^^;;

リレーションを使って持ってこられますよ。

利用する方のテーブルでも番地以下を数値化するフィールドを作ります。

リレーションを
     利用するテーブル  町名区名対照表DB
                      町名  =  町名
                 and
                 番地数値 >= 下限
                 and
                 番地数値 <= 上限

これで区名を参照できます。

番地以下の数値化は「番」「番地」の下に3桁のものが有る様ですので、
すべて3桁で桁合わせした方がいいですね。

Offline

#7 2016-03-16 17:36:50

松田v
Guest

Re: 複雑な分類の方法

チポ様

>リレーションを使って持ってこられますよ。

あらら、ホントだ。なーんだ、リレーションってこんな細かい設定が出来るんだ。はじめて知りました。
ゴリゴリの計算式なんてまったく不要なんですね。目からウロコです。また、いい勉強をさせて頂きました。
大変有難う御座いました。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 544.38 KiB (Peak: 564.92 KiB) ]