- 締切済み
CGIプログラムを使ってレースの結果をHTMLに表示
CGIプログラムの件でご質問したいのですが、datファイルのレース結果をCGIプログラムを使ってHTMLに表示したいと思っています。 datファイルの内容は、レースの結果が1位から順に10位くらいまでA,B,Cクラス混合で並んでいます。 1,Aクラス,青チーム,12:50,山本太郎 2,Cクラス,赤チーム,11:23,山田花子 3,Bクラス,黄チーム,10:52,松本典子 4,Aクラス,桃チーム,10:32,加藤茶子 それをCGIプログラムによって、各クラスごとに表示します。 CGIのプログラムの内容は、 open (FILE, "<data.dat") || die "File 'data.dat' Open Error."; @all = <FILE>; close(FILE); foreach (@all){ ($data1, $data2, $data3, $data4,$data5) = split(/,/, $_); next unless ($data2 eq "A"); &one_data; } sub one_data { print << "END_OF_ONE"; <P>$data1位<BR> $data2<BR> $data3<BR> $data4<BR> $data5<BR> </P> END_OF_ONE } 1; だいたいこんな感じですが、この各クラスごとに表示したHTMLのファイルの順位のところが、もとのdatファイルの順位になってしますので、それを1位から順にクラス別の順位として表示したいのです。 それにはどのようにしたらよいでしょうか? すみません、あまりperlの言語の知識がないもので。。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- lucky111
- ベストアンサー率30% (75/244)
私の場合、sortを使います。 例えば、 a,100 b,300 c,200 というデータがあって、後ろの番号順にしたい場合は、 foreach (@all){ chop;←改行を消す ($data1, $data2) = split(/,/);←$_は無くてもOK $data{$data2} = $_; } foreach (sort $a <=> $b keys(%data)){ print "$_\n"; } とすれば、 a,100 c,200 b,300 となると思います。 b,300 c,200 a,100 にしたい場合は、 foreach (sort $b <=> $a keys(%data)){ にします。(もしかしたら、逆かも・・・) ちなみに、文字をソートしたい場合は、<=>をcmpにすればできます。
お礼
ありがとうございました。 でも、結局、 # クラス毎順位カウンタ $Rank = 1 ; # すべてのデータについて繰り返す foreach (@all){ # 1行の文字列をコロンを目印にして項目に分割する ($data1, $data2, $data3, $data4,$data5, $data6, $data7, $data8, $data9) = split(/,/, $_); next unless ($data3 eq "A"); # 1件分のデータを表示するサブルーチン &one_data; # カウントダウン(順位を下げる) $Rank++ ; } というふうにしました。 ご協力ありがとうございました。