• 締切済み
  • 暇なときにでも

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

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

共感・応援の気持ちを伝えよう!

  • Perl
  • 回答数4
  • 閲覧数794
  • ありがとう数14

みんなの回答

  • 回答No.4
noname#9414
noname#9414

口で説明するのが面倒なので、ソースを書きます。 一通り、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"; } >>ソースはここまで とりあえず、こんなもんですかね。だめな場合は、 補足して下さい。 ではでは☆

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • ARC
  • ベストアンサー率46% (643/1383)

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

参考URL:
http://www.postal.mpt.go.jp/

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • sando
  • ベストアンサー率38% (24/62)

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

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#25358
noname#25358

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 市町村名から県名を調べるサイトってありますか

    タイトルの通りなのですが、住所が市町村名から始まってるデータが多数あります。 訳あってこのデータに県名を入れなくてはならないのですが 地理にたいへん弱いため、市名から県名がぱっと浮かびません・・・ 郵便番号でもあればまだ助かるのですがそれすらなかったり。 いきなり市町村名から始まっている住所の県名を調べられるような方法は何かないですか?

  • 住所を参照して関東なら関東と別セルに表示したいです

    D列に住所を入力したセルがあります。 B列にD列の同じ行にある住所を参照して、関東の住所なら「関東」と表示して それ以外なら、地方と表示させたいと思っています。 C2に =IF(MID($D2,4,1)="県",LEFT($D2,4),LEFT($D2,3)) と入力して都道府県名を表示させて B2に =IF(D2="","",IF(OR(東京都,神奈川県,埼玉県,千葉県,茨城県,栃木県,群馬県),"関東","地方")) と入力しました。 IFの使い方が、まだよく理解できていないため上に書いたような状態に出来なくて 前に進まなくなり頭を悩ませております。 また、C列に都道府県名を出すようにしたのは都道府県名を出したほうが やりやすくなるかなぁと思いやったことですので、C列の処理はいらない 方法などもあれば、無駄に1列増やさなくていいのでご教示頂けると 大変助かります。 ■まとめ  ・住所はD列に入力されている  ・B列(D列以外のどこかの列でもOK)に    住所が関東なら「関東」    住所がそれ以外なら「地方」  と表示したい  ・関東とは、以下の1都6県    東京都、神奈川県、埼玉県、千葉県、茨城県、栃木県、群馬県 よろしくお願い致します。

  • IME 郵便番号辞書 で 都道府県名は要らないのですが・・・?

    IMEの郵便番号辞書ツールって、とても便利だと思うのですが、実際には 都道府県名って不要ですヨネ? 例えば、 〒100-0000→ 東京都千代田区 になりますが 実際の 宛名表記では『東京都』は不要ですよネ? まして、同県内同士の郵便ならば、あるとおかしい感じさえします。 Excelで名簿一覧を作る時なんて、変換してから、県名を消してるのですが、これがけっこう面倒臭い・・・・。 郵便番号辞書ツールを使って、市町村名から表示する方法って有りますか? もし、無ければ、県名変換してから、県名を消すのに簡単な裏技あります??

  • 以下の住所の書き方は間違いになるのでしょうか?

    以下の住所の書き方は間違いになるのでしょうか? 分かりにくいタイトルですみません。 申込用紙や懸賞など、日常生活においてでは、住所を書く機会ということは沢山あります。 特に、指定が無い場合は、住所を書く場合でも、県名を省略して書かれたこともあるかと思います。 (要するに「○○市××(大字名)」などという感じです) そして、市ではなく町に住んでいる人の場合は、大抵町名の前に郡名を書かれると思います。 (「○○郡××町△(大字名)」のように) 市の場合は、「○○市××区 △(大字名)」というように、次に区が来る場合と、「○○市××町 △(大字名)」のように、町名が来る場合、そして、特に合併をしていない市で、区がない場合で、町名も一応存在するものの、街の中心地のようなところで、、店の住所看板などは、町名を省略されて「○○市 ××」というように、町名を省略して表記している場合もあるかと思います。 ふと思ったのですが、以下の場合では、郵便が届かないなど、何かのときに不都合が生じる可能性はあるのでしょうか? 1:市ではなく町に住んでいる人が、郡名を書かずに、県名の次に町名を書く場合  例:「○○県 △町 □(大字名)」 2:合併をしておらず、区のない市で、本来は市名の後に町名が来るのですが、町名を書かずに、市名の次に大字を書く場合(街の中心地のようなところなど、看板などでは省略されている) 例:「○○県 ××市 △(大字名)」

  • 都道府県名要りませんよね?

    こんにちは 質問 郵便番号7桁さえ書いておけば、都道府県名を省略しても、市町村名から先の住所を書いておけば、相手先にしっかり届きますよね?

  • 住所の分割方法

    顧客データで、住所フィールドが1,2,3とあり、本来であれば、 1・・・都道府県 2・・・市区町村から番地 3・・・マンション、アパート名 としなければいけないのですが、郵便番号辞典から入力したため、住所2のフィールドに1と2がくっついて入力されています。 これを都道府県で切って、都道府県名を住所1のフィールドに、市区町村から番地までを住所2のフィールドに分割したいのですが、関数もしくはマクロがあれば教えてください。 住所1には、「東京都」などの「都」に相当する都道府県名まで入れたいのですが。 (データが5000件くらいあります)

  • excelで検索に最適な関数を教えて下さい。

    sheet1にデータがあります。     A      B      C        D 1  県名    会社名    住所      電話番号 2 埼玉県   山田商事   埼玉県…     04-… 3 東京都   佐藤商事   東京都…     03-… 4 東京都   中田商事   東京都…     03-…    …      …      …        … 上記のデータが約500有ります。 表示用sheet2の A1に入力規則を活用して、県名を(例えば東京都と)入力すると A2に東京都 佐藤商事 東京都… 03-… A3に東京都 中田商事 東京都… 03-… が表示させるようにしたいです。 VLOOKUPだと中田商事の行が表示されず、上手くできませんでした。 オートフィルタだとsheetが違う点と、同じ県の会社が多いために、表示が縦に長くなるので見にくいです。 同じ県の会社は多くても50くらいなので、できれば30行くらいまで表示すると、続きはEに県名、Fに会社名として表示できれば一画面に多く表示でき助かります。 関数でできると思うのですが、どうすれば良いでしょうか? わかる方教えてください。よろしくお願いします。

  • ディレクトリ型検索の住所録(PHPとMYSQL)

     簡単なディレクトリ型検索式の住所録をPHPとMYSQLで作っています。 MYSQLにて以下のように、住所がまとまっています。(kenmei,shimei,machimei,namaeというフィールド名です)  A県 a市 (1)町 Aさん  A県 a市 (1)町 Bさん  A県 b市 (2)町 Cさん  B県 c市 (3)町 Dさん  C県 d市 (4)町 Eさん  C県 d市 (4)町 Fさん  ここで、データベースに載っている県名を選択肢として表示し、URLリンクで市名の選択をするページ(shi.php)へ送り出すプログラムをphp上で書きたいと思い、以下のように書いてみました。(A県・B県 というデータベース上に掲載されている県名が表示され、A県を選べばa市・b市とディレクトリ検索式に絞り込まれていくリンク付きを考えています) (データベース接続は省略) while($row = mysql_fetch_array($result)){ $kenmei = $row["kenmei"]; echo "県名を選んでください:"; echo "<a href=\"shi.php?shi="; echo "$kenmei\">"; echo "$kenmei</a><br>\n"; }   そうすると、「A県 A県 A県 B県 C県 C県」というように、総あたり表示なのでA県やC県が何度も表示されてしまいます。(何度もデータベース上に登録されているので、当たり前ですが)  これを、一度出てきた県名は、2度目は表示しないようにし、「A県 B県 C県」という表示をさせるには、どうすればいいのでしょうか。

    • 締切済み
    • PHP
  • エクセルで決まった文字に決まった数字を入れたい。

    エクセルを勉強中です。 検索しようとしましたが、うまく検索できなかったので、教えてください。 たとえばC列すべてに東京都、○○県、▲▲県・・・などとランダムに都道府県名が入っているとして、この中の、東京都に該当する行にだけ、その横のD列に1000と入力し、その他の都道府県名にはすべて200と入力したいのですが、簡単に入力出来る方法はありますか?

  • 社会保険の住所変更について

    社会保険の住所変更について 例えば、実家の秋田県に住所があって、東京都に住んでいて、神奈川県で仕事をしている場合で、社会保険に加入しなくてはならなくなったら、住民票は東京都に移さないと駄目なのでしょうか? 実家の秋田の住所で社会保険に入っているのは何か問題がありますか? また、会社に住所を東京都に移してくれと言われるのでしょうか? よろしく御願いします。