• 締切済み

住所から市町村名などを切り出す

県名から始まったり、県は省略されて市名からはじまったりと、バラバラの住所データから、都道府県名が何で市町村名は何で区は何で残りの住所は何で─というようなものを取り出したいのですが、うまい方法はありませんでしょうか。 東京の場合は2番目に区が来るとか、町はどの階層に入れるのかとか、そういった細かい事は考えなくても良い内容です。 下記のプログラムでは駄目でした。切り出せない上に文字化けします。どうしてでしょう。(東京を別にしているのは京都対策です。) if ($juusho=~tr/^(東京都)//d) {$todoufuken=$1;} elsif($juusho=~tr/^(.+?[県府道])//d) {$todoufuken=$1;}

みんなの回答

noname#9414
noname#9414
回答No.4

口で説明するのが面倒なので、ソースを書きます。 一通り、SJISで確かめましたが、きちんと表示でき ました。1バイトごとにパターンマッチさせるので、 1バイト文字と2バイト文字が混じっていても大丈夫 なはずです。 >>ソースはここから $result = 0; @ken = ("北海道","青森県","秋田県","岩手県",  "山形県","宮城県","福島県","茨城県","群馬県",  "栃木県","千葉県","埼玉県","神奈川県","東京都",  "新潟県","長野県","山梨県","静岡県","岐阜県",  "愛知県","滋賀県","富山県","石川県","京都府",  "大阪府","和歌山県","三重県","鳥取県",  "島根県","広島県","岡山県","兵庫県","香川県",  "徳島県","愛媛県","高知県","福岡県", 佐賀県",  "長崎県","熊本県","宮崎県","鹿児島県",  "大分県","沖縄県","山口県","奈良県","福井県"); @str = ("東京都千代田区1-1-1", "千代田区1-1-1",  "千葉県千葉市中央区", "千葉市中央区",  "兵庫県神戸市","神戸市"); for($i = 0; $i < @str; $i++) {   foreach $key (@ken)   {     if($str[$i] =~ s/$key//eg)     {       ;     }   }   print "$str[$i]\n"; } >>ソースはここまで とりあえず、こんなもんですかね。だめな場合は、 補足して下さい。 ではでは☆

すると、全ての回答が全文表示されます。
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

現在市区町村は、全3368個あります。 この程度であれば、別途、市区町村名ファイルを作って、マッチング処理をさせてもいいんじゃないかと思います。 「郵便ホームページ」(下記URL)で、7桁郵便番号の一覧が手に入るので、それを加工すれば、市区町村の一覧が手に入ります。

参考URL:
http://www.postal.mpt.go.jp/
すると、全ての回答が全文表示されます。
  • sando
  • ベストアンサー率38% (24/62)
回答No.2

Perlのバージョンと使用している文字コードにもよりますが、 [県府道]は1バイト単位でマッチする可能性がありますので(つまり[県府道]は6文字の文字列と解釈される) (県|府|道)にしてみてはどうでしょうか あとは漢字コードがSJISの場合は変なことが起こるかもしれません。

すると、全ての回答が全文表示されます。
noname#25358
noname#25358
回答No.1

 「都」や「区」「町」などの文字が間違いなく入力されているという条件かでならば、それらの文字を使って切り分けることができます。  しかし、もしそうでないのなら、基本的に不可能だと思った方がいいでしょう。  よっぽど巨大なデータベースを作らない限り。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう