CGI-BBS > CGI > Perl > ソートについて


カレッヂ
カレッヂ


質問者 よっしー  投稿日 5/12(土) 01:00:35
$roundの数値が大きい順にソートさせて
selectに当てはめ$roundの総和数を表示したいのですが
行き詰まって困ってますアドバイスお願いします。

        print "<td><select name=email>\n";
        print "<option value=\"\">送信先を選択\n";
        open(IN,"$logfile") || &error("Log Open Error");

        # 多回数順にソート
        $total = 0;
        foreach $line (@lines) {
                ($no,$name,$email,$round) = split(/<>/,$line);
                $total += $round;
                $name{$no} = $name;
                $email{$no} = $email;
                $round{$no} = $round;
        }

        foreach (sort { ($round{$b} <=> $round{$a}) || ($a cmp $b)})) {

        # 結果を表示
        print "<option value=\"$email{$_}\">$name{$_}\n";
                }
        print "</select></td></tr>\n";
回答者 アンジェラ  [削除]  投稿日 5/16(水) 01:06:35
>foreach (sort { ($round{$b} <=> $round{$a}) || ($a cmp $b)})) {
sort すべき LIST が指定されていません。) の数も多いですね。
foreach (sort { ($round{$b} <=> $round{$a}) || ($a cmp $b)} keys %round) {
こんな感じでしょうか。
質問者 よっしー  [削除]  投稿日 5/16(水) 08:53:03
回答ありがとうございました出来ました!
@lines = <IN>;
close(IN);
ってのも抜けてたようです(^-^;

↓こうなりました
        print "<tr><td><font face=\"Verdana\">Mailto</td>\n";

        print "<td><select name=email>\n";
        print "<option value=\"\">送信先を選択\n";
        open(IN,"$logfile") || &error("Log Open Error");
        @lines = <IN>;
        close(IN);

        # ソート処理
        $total = 0;
        foreach $line (@lines) {
                ($no,$name,$email,$round) = split(/<>/,$line);
                $total += $round;
                $round{$no} = $round;
                $email{$no} = $email;
                $name{$no} = $name;
        }
        foreach (sort { ($round{$b} <=> $round{$a}) || ($a cmp $b)} keys(%round)) {

        # 結果を表示
        print "<option value=\"$email{$_}\">$name{$_}\n";
                }
        print "</select></td></tr>\n";

このページは終了したので返信(回答)は書きこめません

Web裏技