• ベストアンサー

sort関数でひらがなとカタカナを一緒に並べるには

("いちご","リンゴ","サクランボ","みかん") が入ったリストを、「sort」関数で並び替えすると いちご、みかん、サクランボ、リンゴ このように前半にひらがな、後半にカタカナで処理されます。それを、 いちご、サクランボ、みかん、リンゴ このようにひらがなとカタカナを混ぜて五十音順にしたいのですが、 どうすればいいのでしょうか よろしくお願いします

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#こんな感じでどうでしょう use encoding 'shiftjis'; @data=("いちご","リンゴ","サクランボ","みかん"); foreach $x (@data){ $data{$x}=&toKana($x); } @data=sort { $data{$a} cmp $data{$b} } keys %data; sub toKana($){ my $str = shift; $str =~ tr/ぁ-ん/ァ-ン/; return $str; }

is_may
質問者

お礼

解決しました ありがとうございました!

その他の回答 (1)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.2

ひらがな、かたかな、どちらかに変換した文字を先頭においてからソートしては? ShiftJISであればですが、以下のように。 #!Perl use ShiftJIS::String; @kana_list = ('いちご', 'みかん', 'サクランボ', 'リンゴ'); print "1st state:\n", join("\n", @kana_list), "\n\n"; for (@kana_list) { my $tmp = $_; ShiftJIS::String::strtr(\$tmp, 'ぁ-ん', 'ァ-ン', 'o'); $_ = $tmp . "\t" . $_; } print "2nd state:\n", join("\n", @kana_list), "\n\n"; @kana_list = sort @kana_list; print "3nd state:\n", join("\n", @kana_list), "\n\n"; $_ = (split(/\t/, $_))[1] for @kana_list; print "4th state:\n", join("\n", @kana_list), "\n\n"; __END__ D:\@ai\@Perl\app>KANA_SORT.pl 1st state: いちご みかん サクランボ リンゴ 2nd state: イチゴ いちご ミカン みかん サクランボ サクランボ リンゴ リンゴ 3nd state: イチゴ いちご サクランボ サクランボ ミカン みかん リンゴ リンゴ 4th state: いちご サクランボ みかん リンゴ D:\@ai\@Perl\app>

is_may
質問者

お礼

難しいですね^^; ありがとうございましたm(_ _)m

関連するQ&A

  • エクセルでの並び替えでひらがなの後にカタカナにするには

    エクセルの並べ替えでは、ひらがなだけでの50音順、その後に、カタカナだけでの50音順、というような並べ替えをすることができないのでしょうか?ふりがなを使わない設定にしても文字コード順になるだけで解決できません。並べ替える方法があれば教えて頂けないでしょうか? よろしくお願いします。

  • csvファイルの読込みとソート

    いつも大変参考にさせていただいております。 csvファイルの読み込みとソートをしたく、ネットや過去ログ等を相当調べたのですが、完全に詰まってしまいました。 (検索キーワード:「php csv ソート」「php 二次元配列 ソート」など) とても困っています。どなたかよろしくお願いします。 以下のようなcsvファイルを読み込みソートしたいのです。 ■csvファイル 20110803, A, りんご 20111215, B, みかん 20110306, A, みかん 20110620, A, りんご 20110215, B, りんご ■個別にやりたい処理 (1)、左列の日付で昇順ソートしてすべて表示 (2)、「A」を含む行をすべて表示(日付順) (3)、「A」+「りんご」を含む行をすべて表示(日付順) □補足 csvをfgetcsvで読み込み、テーブルに入れて表示するところまではできました。 csvの行は増えていきます(max100行位)。列は固定。

    • ベストアンサー
    • PHP
  • エクセル関数 データの抽出について

    エクセル2010 重複データの抽出。 重複データの抽出方法をご教示ください。 抽出先はシート1のA列A3~抽出データの分だけ リストはシート2のB2:AB32まで フィルターオプションなども使ってみたのですが どうも上手くいきません。 どなたか知恵をお貸しください。 方法はできれば関数だといいのですが(データが増えてもいいように) できなければ他の方法でもいいです。 VBAなどは全くの初心者なので出来れば避けたいのですが… シート2     A    B   C    D~AB32 1  "" 2 いちご ばなな いちご りんご 3 みかん いちご ばなな いちご 4 りんご ばなな いちご みかん 5 みかん いちご ばなな りんご 6 ばなな ばなな りんご いちご : : 32 シート1(重複データなし)  A 1  "" 2  "" 3 いちご 4 みかん 5 りんご 6 ばなな 7 : : 抽出リストのデータはシート2のB2:AB32にぎっしり入っています。 宜しくお願い致します。

  • 二つのリストから店舗別リストを作成

    お世話になっております。 出来ればマクロで在庫リスト、売上リストから店舗別のリストを作成したいのですが店舗リストに纏めるときに在庫リストで売上リストに同じ品目が無い時に空白が出来てしまい上手く揃えることが出来ません。 ご教授お願い致します。 在庫リスト 売上リスト 品目  鹿児島  福岡           品目  鹿児島  福岡 メロン   1    2              いちご   1    2 みかん   3    1             りんご    1    1 りんご    1    1              なし     1    1  なし     1    1             みかん    3    1 いちご    1    1             パイン    1    2 これらのリストを下記のように作成したいのです。 鹿児島   福岡 品目   売上   在庫           品目   売上   在庫 いちご   1    1             いちご  1    2        なし     1    1             なし    1    1  パイン    1    0             パイン  2    1 みかん    3    3            みかん  1    1 メロン     1    0            メロン   0    2 りんご     1    1             りんご  1    1 自分でマクロを作成してみて品目の順は並び替えを使用すれば問題ないのですが、二つのリストにそれぞれ無い品目があったりなかったりする時に無いほうに追加したりして揃える事がどうしても出来ませんでした。 宜しくお願い致します。

  • 関数によるエクセル検索について

    エクセル 検索方法についての質問です。 区分 品名 数量 1  りんご 10 1  いちご 5 2  みかん 2 3  いちご 8 4  ぶどう 10 5  いちご 2 5  いちご 8 5  りんご 3 6  みかん 7 このような表の場合 区分 1を選択し、 りんご 10 いちご 5 というようにエクセルに表示させたいです。 VLOOKUP関数をつかうと上の行の 「りんご10」 しか表示させることができません。 同じ区分のものを一度に表示させたいのですが、関数を使って表現することはできますか?? よろしくおねがいします。

  • Vine Linux4.2でのsort

    fruits.txtの中身が みかん 77 グレープフルーツ 8 いちご 91 キウイ 108 という感じなんですが、sortコマンドを使って果物の数が多い順にならべるにはどうしたらいいですか? -kや-nを使ってみたのですが上手く並び変わりませんでした。 よければ教えて下さい

  • エクセル関数でおしえてください。

    エクセル関数でおしえてください。 以下のような表があります。   A     B     C     D     E  1 いちご   1 2 バナナ        1  3 ぶどう             1 4 サクランボ                1 5 もも    1 6 りんご        1 7 なし              1 8 すいか                  1 9 果物(1) いちご バナナ ぶどう サクランボ 10果物(2) もも  りんご なし  すいか B1~E8に「1」のフラグをたてます。 (フラグはランダムにたちます) 9、10行目に関数をいれて、いちご、もも・・と果物の名前を表示させたいです。 どなたかいい知恵をかしてください。 よろしくお願いします。

  • エクセル並び替え。思ったように並ばない

    一つのセルに下記のように入ってる場合に 商品コード順(数字)の若い方から順番に並び替えを したいのですが 10 いちご 70 みかん 500 りんご 600 ぶどう 実際には、 10 いちご 500 りんご 600 ぶどう 70 みかん というふうに、何故か数字の若い70が最後にきて しまいます。おそらく数字の後に文字が入ってるからだと 思うのですがセルを分けるにはデータが多すぎるので このまま数字の若い順に並び替え出来る方法は ありますでしょうか?

  • 【JavaScript配列のソート】2つのキーで

    JavaScriptのsort()を使用して次の並べ替えをしたいと思っています。 key1, key2, data, data 5/5 , 5/4 , リンゴ, 110 5/3 , 5/6 , バナナ, 130 5/7 , 5/2 , ミカン, 110 5/3 , 5/2 , イチゴ, 150 この配列をkey1を昇順でかつkey2も昇順とし並び変えたいのです。 key1, key2, data, data 5/3 , 5/2 , イチゴ, 150 5/3 , 5/6 , バナナ, 130 5/5 , 5/4 , リンゴ, 110 5/7 , 5/2 , ミカン, 110 str.sort(); これだとkey1のみでソートされてしまいますので、条件を複数指定したいのですがいい方法はないでしょうか? 結果はweb(テーブル等)に表示するのではなく、配列変数のままで獲得したいと思っています。 google apps のスプレッドシート内でスクリプトとして使用したいと思っています。 かなり調べたのですがどれも1項目(key1)のみの検索しかヒットしませんでした。 よろしくお願いします。

  • ExcelかAccessで五十音順にソートしたい

    Office2007を使っています。ExcelかAccessで五十音順にソートしたいのですが、漢字も一緒にソートしたいと思っています。Excelで五十音でソートすると、最初にアルファベット、続いてカタカナ、続いて漢字というようにソートされます。アルファベットは別にして、カタカナ、漢字は一緒に五十音でソートしてもらいたいのですが、そのような方法はないでしょうか? 例えば アンドウ コンドウ 安藤 イトウ というデータがあれば アンドウ 安藤 イトウ コンドウ というようにデータがソートされてもらいたいです。 Excelの関数のphoneticはExcelからのデータじゃないので 使えません。なにとぞご教授お願いします。

専門家に質問してみよう