• ベストアンサー

カタカナの50音順ソーティング

カタカナ3文字と漢字の名前がセットになったデータを、頭文字3文字のカタカナで50音順ソーティングしたいのですが、何故かうまくいきません。 原因と解決法をご教授いただければ幸です。 データは例えば、以下の様なものです。 (以下はプログラムでソーティングした結果ですが、以下のとおり微妙に50音順でソーティングされません) イジュ 伊集院光 アキモ 秋元康 オグリ 小栗旬 スピッ スピッツ エハラ 江原啓之 スマッ SMAP ナカガ 中川翔子 ニュー NEWS バクシ 爆笑問題 イノウ 井上陽水 ヤマダ 山田太一 ---------------- 私が試したソーティングプログラムは以下です。 ---------------- $space = " "; foreach $key (sort keys %yomi1) { print $yomi1{$key}.$space.$title{$key}."<BR>"; ;} ---------------- $yomi1{$key}には名前の頭文字カタカナ3文字が入っています。 $title{$key}には漢字の名前が入っています。 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.4

何度もすいません 前のリストの配列によるサンプル出力の訂正 print $yomi.$space.$title."<BR>"; です。 あわててコピペしてしまいました。 すいません。

keeeeeeen
質問者

お礼

ralf124c様の大きなヒント(質問)を元に、ソーティングの直前にあるプログラムを下記のとおりに改造したら、うまくソーティングできました! ---------------- $id{$yomikata} = $id; $title{$yomikata} = $title; $yomikata{$yomikata} = $yomikata; $yomi1{$yomikata}= substr($yomikata,0,6); $usno++; } ---------------- また、御丁寧にサンプルプログラムまで提示していただき、ありがとうございます。 今後は、提示していただいた、サンプルプログラムを元に、ハッシュ(連想配列)の構造とソーティングの理解を深めていきたいと思っています。 この度は、ご指導いただき、誠にありがとうございました。 心より感謝致します。

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

その他の回答 (3)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

まずハッシュ(連想配列)の構造を理解しましょう とりあえずサンプルです ## ハッシュを利用したいならこんな感じ my $space = ' '; my %title = ('イジュ'=>'伊集院光', 'アキモ'=>'秋元康', 'オグリ'=>'小栗旬', 'スピッ'=>'スピッツ', 'エハラ'=>'江原啓之', 'スマッ'=>'SMAP', 'ナカガ'=>'中川翔子', 'ニュー'=>'NEWS', 'バクシ'=>'爆笑問題', 'イノウ'=>'井上陽水', 'ヤマダ'=>'山田太一' ); foreach $yomi (sort keys %title){ print $yomi.$space.$title{$yomi}."<BR>"; } ## どうしても配列ならこんな感じ my $space = ' '; my @aDATA = ( 'イジュ 伊集院光', 'アキモ 秋元康', 'オグリ 小栗旬', 'スピッ スピッツ', 'エハラ 江原啓之', 'スマッ SMAP', 'ナカガ 中川翔子', 'ニュー NEWS', 'バクシ 爆笑問題', 'イノウ 井上陽水', 'ヤマダ 山田太一' ); my @aSORTED = sort @aDATA; foreach(0..$#aSORTED){ my ($yomi,$title) = split(/ /,$aSORTED[$_]); print $yomi.$space.$title{$yomi}."<BR>"; }

全文を見る
すると、全ての回答が全文表示されます。
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

ハッシュの要素でソートされていらっしゃるようですが 各要素「$key」には何が入っていますか?

keeeeeeen
質問者

お礼

ralf124c様へ ご質問、ありがとうございます。 >ハッシュの要素でソートされていらっしゃるようですが >各要素「$key」には何が入っていますか? $keyを表示させる為に、プログラムを以下の様に改造しました。 ---------------- foreach $key (sort keys %yomi1) { print $yomi1{$key}.$space.$title{$key}."●KEYは".$key."<BR>"; ;} ---------------- そして、表示させたところ、以下の様に表示されました。 イジュ 伊集院光●KEYは0 アキモ 秋元康●KEYは1 オグリ 小栗旬●KEYは10 オダギ オダギリジョー●KEYは11 カトゥ KAT-TUN●KEYは12 キムラ 木村カエラ●KEYは13 ケツメ ケツメイシ●KEYは14 コイケ 小池徹平●KEYは15 コウダ 倖田來未●KEYは16 コジマ 小島よしお●KEYは17 コブク コブクロ●KEYは18 スピッ スピッツ●KEYは19 エハラ 江原啓之●KEYは2 スマッ SMAP●KEYは20 タチバ 立花隆●KEYは21 タマキ 玉木宏●KEYは22 ナカガ 中川翔子●KEYは23 ニュー NEWS●KEYは24 バクシ 爆笑問題●KEYは25 ハマサ 浜崎あゆみ●KEYは26 バンプ BUMP OF CHICKEN●KEYは27 ---------------- ということは、$keyの値でソーティングされてしまっている、ということでしょうか? ちなみに、このプログラムの直前で、下記の様なプログラムで、ハッシュ化しています。(以下、ソーティングプログラムを含め、全プログラムを記載します) ---------------- $usno=0; open(IN,"$file") || &error("Open Error : $file"); while (<IN>) { chomp; ($ptype,$num,$nam,$eml,$url,$id,$date,$host,$title,$yomikata) = split(/<>/); $id{$usno} = $id; $title{$usno} = $title; $yomikata{$usno} = $yomikata; $yomi1{$usno}= substr($yomikata,0,6); $usno++; } close(IN); $space = " "; # ソート処理 foreach $key (sort keys %yomi1) { print $yomi1{$key}.$space.$title{$key}."●KEYは".$key."<BR>"; ;} print "</body></html>\n"; exit;

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

手元で確認した限り, perl-5.8.8+EUC, ActivePerl-5.8.6+Shift_JIS のどちらの環境でもなりませんでした. 使われている文字コードとか perl のバージョンはどうなってますか?

keeeeeeen
質問者

お礼

Tacosan様 お返事、ありがとうございます。 >手元で確認した限り, perl-5.8.8+EUC, ActivePerl-5.8.6+Shift_JIS のどちらの環境でもなりませんでした. それは、私と同様に50音順にソーティングされなかった、という意味でしょうか? それとも、上記の様に変なソーティングはされなかった(=きちんと50音順にソーティングされた)、という意味でしょうか? 教えて下さい。 >使われている文字コードとか perl のバージョンはどうなってますか? 使っている文字コードは、シフトJIS 改行コードはCR+LF です。 perl のバージョンは、サクラサーバーを使っているので、 5.8.xです。 お手数かけますが、よろしくお願い致します。

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

関連するQ&A

  • ソーティングの仕組み

    エクセルのソーティングの仕組みはどうなっているのでしょうか? 住所録などの作成で名前順に文字を打ち込んでいった場合、ソーティングすると平仮名で打ち込んだあいうえお順に配列されますが、これはどういう仕組みからこういう配列になるのでしょうか? 例:1.藤田(ふじた)2.古川(ふるかわ)       読み方を変えて、1.ふじた 2.こがわと入力すると      1.古川(こがわ)2.藤田(ふじた)と、      このような順番になる仕組みが知りたいのです。   初心者なもので、どなたか教えて下さい。

  • アイコンの名前順に整列

    エクセルのデータ内だと、ソートした時に、 漢字、カタカナなどいろいろでも、読みでソートしてくれますが、 ワードのフォルダ内で、ファイルを名前順にしようとすると、 漢字は漢字、カタカナはカタカナ、また、読み仮名も 音読みでひろっているのか、ぜんぜん名前順になりません。 これはどうしようもないのでしょうか? 分かる方、教えてください。

  • カタカナに変換する時の不具合

    カタカナや漢字に変換する時にスペースキーを押すのは誰もがやっているとは思いますが。 カタカナに変換する時に一回スペースキーを押しただけでは一部変換されない事があります。 何かの不具合ですか。それともパソコンによってですか。

  • PHPによる並べ替え(ソーティング)のプログラム方法

    例えば次のような表があったとします。 ------------------- |名前|国語|数学|英語| ------------------- | B | 75 | 82 | 69 | ------------------- | C | 87 | 80 | 71 | ------------------- | A | 85 | 73 | 92 | ------------------- これを例えば国語の点数の高い順で並べ替えるとこうなりますよね。 ------------------- |名前|国語|数学|理科| ------------------- | C | 87 | 80 | 71 | ------------------- | A | 85 | 73 | 92 | ------------------- | B | 75 | 82 | 69 | ------------------- さてここで質問なのですが、上のような数字や名前のアルファベット順でのソーティングを実現するプログラムは、どのように作成すればよいのでしょうか。 済みませんがどなたかお教え下さい。勿論教えるときに例として上の表を用いてもかまいません。

    • 締切済み
    • PHP
  • 全角カタカナについて。

    懸賞とかに、自分の名前とかを入力する時、全角カタカナでとあるので、スペースキーや、F7とかで変換していたのですが、エラーが出て、何度もやり直してくださいとなってしまうのです。どうしたら全角カタカナに出来るか、解り易く教えてください。

  • 「無変換」キーを押したとき、「スペース」キーと同じように漢字変換されてしまうのですが・・

    無変換キーを押すと、普通は押す毎に 「ひらがな→全角カタカナ→半角カタカナ」の順に変わると思うのですが、 無変換キーを押しても、スペースキーを押した時と全く同じように 漢字変換されてしまいます。 無変換キーで「ひらがな→全角カタカナ→半角カタカナ」 としか変換できないようにするにはどうしたらいいのでしょうか?

  • Excelの住所録を「あいうえお」順にならべるには?

    Excelで住所録を編集しました。 名前が順不同になっているので 「あいうえお」順にしたいのですが出来ますか? 住所録にはB列にカタカナのふりがながとC列に漢字名付いています。 よろしくお願いします。

  • order by 2カラムの先頭1文字で並替可能?

    order byする際、2カラムの先頭1文字で判断して、並べ替えることは可能でしょうか? ■想定 ・titleカラム ・yomiカラム ※運用案 案1 「titleカラム」先頭1文字目に漢字が入っているときだけ、yomiカラムにカタカナでフリガナを振る 案2 「titleカラム」先頭1文字目に漢字が入っているときは必ず、yomiカラムにカタカナでフリガナを振る

    • ベストアンサー
    • MySQL
  • 明治の女性名はなぜ二文字のカタカナなのですか

    明治の女性名はなぜ二文字のカタカナなのですか 明治の女性の名前を見ると、セツとかトセとかコノとかチカとか、カタカタ二文字の名前が多いですが、 何か意味があってカタカナ二文字なのでしょうか。 明治時代に漢字の名前だった女性もいると思いますが、例えばどんな名前でしょうか。

  • ATOK 2007のカタカナ変換について

    PCのOSはVista Home Premiumです。 ATOK 2006を使用しておりましたが ATOK 2007の発売を機に購入し本日インストールしました。 ATOK 2006の時はローマ字入力で文字(ひらがな)を入力し 無変換キーを押せばカタカナに変換できたのですが ATOK 2007で同じ操作をすると 「半角アルファベットをそのまま入力します」と出て カタカナに変換できません。 スペースキーを押せばカタカナの候補が出てきますが 今までと同じ使い方(変換方法)の方が慣れているので 無変換キーでカタカナに変換できないのが不便です。 どなたか無変換キーでカタカナに変換出来るやり方が分かる方がいたら教えて下さい。 それともATOK 2007ではそれは出来ないのでしょうか? 宜しくお願いいたします。

このQ&Aのポイント
  • Adobeで作成したMP4ファイルをDVDビデオとして焼こうとすると、利用できないというエラーメッセージが表示されます。この問題の解決方法について教えてください。
  • MP4ファイルをDVDに焼く方法について解説します。Adobeで作成したMP4ファイルをDVDビデオに変換し、再生可能な形式にする方法をご紹介します。
  • ソースネクスト株式会社の製品・サービスを利用してMP4ファイルをDVDに焼く方法について質問です。MP4ファイルの形式を変換することなく、DVDビデオとして再生する方法を教えてください。
回答を見る