フォームから入力されたデータをCGIで並び替えるには?
Aurai
[E-Mail]
2000/03/21(火) 06:10:52
@r=<IN>;
foreach(sort{($a=~/([0-9]*)$/)[0] <=> ($b=~/([0-9]*)$/)[0];}@r){print "$_<br>";}
でどうでしょう
年齢は半角数字であると前提します
もと。
2000/03/21(火) 12:50:14
@listに入っているとして、
print map {"$_->[0]<BR>"}
sort {$a->[3] <=> $b->[3]}
map {[$_,split(/,/)]} @list;
と言うのも有名です。
Schwartzian Transformという名前が付いているそうです。
こちらの方が多少速いかな・・?
hiboo
2000/03/23(木) 00:01:31
Auraiさん、もとさん、ありがとうございました。
ただ、もとさんのスクリプトはなぜか並び替えがうまくいきません。
どうしてでしょうか?
お察しのことと思いますが、私はCGIをはじめたばかりの超素人です。
あつかましいお願いですが、並び替えの対象を代えたりしてアレンジ
するときのために教えて頂いたスクリプトにつきまして解説して頂けな
いでしょうか。
Aurai
[E-Mail]
2000/03/23(木) 05:48:18
>foreach(sort{($a=~/([0-9]*)$/)[0] <=> ($b=~/([0-9]*)$/)[0];}@r){print "$_<br>";}
($val =~ /([0-9]*)$/)[0]
で、$valの尻にある数字を抜き出しています
sortで@rの尻の数字で整列したリストを作り
それをforeachで一列ずつprintしています
hiboo
2000/03/23(木) 08:43:51
Aurai さん、もとさん、早速アドバイスして頂きありがとうございます。
>($val =~ /([0-9]*)$/)[0]
>で、$valの尻にある数字を抜き出しています
尻にある数字とは、dataファイルに「name,Email,age」の順で納められている情報
だとすると、ageの内容でしょうか?
また、順番が「name,age,Email」になってたり、並び替えの対象を別にしたいときは
どうしたらよいでしょうか?