
カタカナ3文字と漢字の名前がセットになったデータを、頭文字3文字のカタカナで50音順ソーティングしたいのですが、何故かうまくいきません。
原因と解決法をご教授いただければ幸です。
データは例えば、以下の様なものです。
(以下はプログラムでソーティングした結果ですが、以下のとおり微妙に50音順でソーティングされません)
イジュ 伊集院光
アキモ 秋元康
オグリ 小栗旬
スピッ スピッツ
エハラ 江原啓之
スマッ SMAP
ナカガ 中川翔子
ニュー NEWS
バクシ 爆笑問題
イノウ 井上陽水
ヤマダ 山田太一
----------------
私が試したソーティングプログラムは以下です。
----------------
$space = " ";
foreach $key (sort keys %yomi1) {
print $yomi1{$key}.$space.$title{$key}."<BR>";
;}
----------------
$yomi1{$key}には名前の頭文字カタカナ3文字が入っています。
$title{$key}には漢字の名前が入っています。
以上、よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
何度もすいません
前のリストの配列によるサンプル出力の訂正
print $yomi.$space.$title."<BR>";
です。
あわててコピペしてしまいました。
すいません。
ralf124c様の大きなヒント(質問)を元に、ソーティングの直前にあるプログラムを下記のとおりに改造したら、うまくソーティングできました!
----------------
$id{$yomikata} = $id;
$title{$yomikata} = $title;
$yomikata{$yomikata} = $yomikata;
$yomi1{$yomikata}= substr($yomikata,0,6);
$usno++;
}
----------------
また、御丁寧にサンプルプログラムまで提示していただき、ありがとうございます。
今後は、提示していただいた、サンプルプログラムを元に、ハッシュ(連想配列)の構造とソーティングの理解を深めていきたいと思っています。
この度は、ご指導いただき、誠にありがとうございました。
心より感謝致します。
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>";
}
No.2
- 回答日時:
ハッシュの要素でソートされていらっしゃるようですが
各要素「$key」には何が入っていますか?
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;
No.1
- 回答日時:
手元で確認した限り, perl-5.8.8+EUC, ActivePerl-5.8.6+Shift_JIS のどちらの環境でもなりませんでした.
使われている文字コードとか perl のバージョンはどうなってますか?
Tacosan様
お返事、ありがとうございます。
>手元で確認した限り, perl-5.8.8+EUC, ActivePerl-5.8.6+Shift_JIS のどちらの環境でもなりませんでした.
それは、私と同様に50音順にソーティングされなかった、という意味でしょうか?
それとも、上記の様に変なソーティングはされなかった(=きちんと50音順にソーティングされた)、という意味でしょうか?
教えて下さい。
>使われている文字コードとか perl のバージョンはどうなってますか?
使っている文字コードは、シフトJIS
改行コードはCR+LF
です。
perl のバージョンは、サクラサーバーを使っているので、
5.8.xです。
お手数かけますが、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*(アスタリスク)の意味
-
「名前を元に占いが出来るサイ...
-
VBAにハッシュ関数はないのです...
-
VBAでの一時停止と再開の方法
-
画面を強制的に再描画させる方法
-
エクセルVBAでTransposeの不思議
-
VBのReturnの使い方
-
EXCEL VBA ユーザーフォームの...
-
CSVファイルの特定の行だけを読...
-
VBAで3秒だけ時間を止めたい
-
文字の整列(printf)
-
ループフリー
-
VBA for i=1 to lastrow
-
WinAPI「MsgWaitForMultipleObj...
-
多重ループの抜けだし方
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
チェックボックスのperlでの値...
-
リストボックスに縦スクロール...
-
DoEventsが必要な理由について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハッシュ検索はなぜ速い
-
チェックデジットについて
-
重複ファイルを削除したいので...
-
文字列を変数名として扱う方法
-
ハッシュリストって単にハッシ...
-
Perlでファイルを読み込み...
-
「名前を元に占いが出来るサイ...
-
列挙型と連想配列の違いを教え...
-
VBAにハッシュ関数はないのです...
-
まったく同じファイルのハッシ...
-
英語でのシャープとコメの呼び...
-
foreachについて
-
[perl] $xxx == 1 or $xxx == 5...
-
ハッシュリスト。
-
二次元配列のハッシュ版の記述...
-
ハッシュのソート
-
正規表現を使ってコードを短く...
-
短いハッシュの作り方
-
Perlでいうハッシュとはどのよ...
-
フォームデータをハッシュで返...
おすすめ情報