Annotation of processmail/createtable.pl, revision 1.2

1.1       boris       1: #!/usr/local/bin/perl
1.2     ! boris       2: #$Id: createtable.pl,v 1.1 2002/02/04 15:44:51 boris Exp boris $
1.1       boris       3: #
                      4: #
                      5: #
                      6: # Исходные файлы и параметры
                      7: #
                      8: 
                      9:     use Getopt::Std; 
                     10: 
1.2     ! boris      11: $usage = 'createtable.pl $Revision: 1.1 $, $Date: 2002/02/04 15:44:51 $'. "\n".
        !            12: "Usage: createtable.pl [-d] [-s] [-t answers_file] [-m mail_file]  [-o results] \n";
1.1       boris      13: 
                     14: require 'parameters.pl';
                     15: require 'subroutines.pl';
                     16: 
1.2     ! boris      17: die $usage unless getopts('t:m:o:ds');
1.1       boris      18: 
                     19: $DEBUG=$opt_d;
1.2     ! boris      20: $SHORT=$opt_s;
1.1       boris      21: 
                     22: my %teams;
                     23: my @answers;
                     24: my @ratings;
                     25: #
                     26: # Читаем старые результаты
                     27: #
                     28: if ($opt_t)
                     29: {
                     30:     die "Cannot open $opt_t\n" unless open(INFILE,$opt_t);
                     31:     readhash(\@answers);
                     32:     close(INFILE);
                     33: }
                     34: 
                     35: #
                     36: # Читаем ответы команд
                     37: #
                     38: if ($opt_m)
                     39: {
                     40:     die "Cannot open $opt_m\n" unless open(INFILE,$opt_m)
                     41: }
                     42: else
                     43: {
                     44:     *INFILE=*STDIN;
                     45: }
                     46: readmail(\%teams);
                     47: close(INFILE);
                     48: #
                     49: # Чистим хэш %answers
                     50: #
                     51: collect_answers(\%teams,\@answers);
                     52: #
                     53: # Подсчитываем рейтинги вопросов
                     54: #
                     55: rate_questions(\%teams,\@answers,\@ratings);
                     56: #
                     57: # Вычисляем число ответов и рейтинги команд
                     58: #
                     59: find_scores(\%teams,\@answers,\@ratings);
                     60: #
                     61: # Ну а теперь печатаем саму таблицу...
                     62: #
                     63: if ($opt_o)
                     64: { 
                     65:     die "Cannot open $opt_o\n" unless open(OUTFILE,">$opt_o");
                     66:     select OUTFILE;
                     67: }
                     68: #
                     69: # Печатаем заголовок
                     70: #
1.2     ! boris      71: printf "%5s ", "N";
1.1       boris      72: for ($i=1;$i<=$MAXQUEST;$i++)
                     73: {
1.2     ! boris      74:     if ($SHORT) {
        !            75:        printf("%1d",$i%10);
        !            76:     } else {
        !            77:        printf "%3d",$i;
        !            78:     }
1.1       boris      79: }
                     80: printf "%3s","О";
                     81: printf "%4s","Р";
                     82: printf " КОМАНДА";
                     83: print "\n";
                     84: #
                     85: # Печатаем команды построчно
                     86: #
                     87: foreach $team (sort 
                     88:                {
                     89:                    $teams{$b}->{score} <=> $teams{$a}->{score}
                     90:                    or
                     91:                        $teams{$b}->{rating} <=> $teams{$a}->{rating}
                     92:                } keys %teams
                     93:               )
                     94: {
1.2     ! boris      95:     printf "%5d ",$teams{$team}->{regnum};
1.1       boris      96:     for ($i=1;$i<=$MAXQUEST;$i++)
                     97:     {
                     98:        my $answer = $teams{$team}->{answers}[$i];
                     99:        my $score = $answers[$i]->{$answer}->{score};
                    100:        $score = '-' unless $score;
1.2     ! boris     101:        if ($SHORT) {
        !           102:            printf "%1s",$score;
        !           103:        } else {
1.1       boris     104:            printf "%3s", $score;
1.2     ! boris     105:        }
1.1       boris     106:     }
                    107:     printf "%3s",$teams{$team}->{score};
                    108:     printf "%4s",$teams{$team}->{rating};
                    109:     print " $team";
                    110:     print "\n";
                    111: }
                    112: #
                    113: # Печатаем последнюю строку таблицы
                    114: # в ней рейтинги вопросов
                    115: #
1.2     ! boris     116: if ($SHORT) {
        !           117:     print "Рейтинг\n";
        !           118:     for ($j=0;$j<$MAXQUEST/12;$j++) {
        !           119:        my $max=$j*12+12;
        !           120:        if ($max>$MAXQUEST) {
        !           121:            $max=$MAXQUEST;
        !           122:        }
        !           123:        for ($i=$j*12+1;$i<=$max;$i++){
        !           124:            printf("%3s",$i);
        !           125:        }
        !           126:        printf "\n";
        !           127:        for ($i=1+$j*12;$i<=$max;$i++){
        !           128:            printf("%3s",$ratings[$i]);
        !           129:        }
        !           130:        printf "\n";
        !           131:     }
        !           132: } else {
        !           133:     printf "%5s ", "Р";
        !           134:     for ($i=1; $i<=$MAXQUEST;$i++)
        !           135:     {
1.1       boris     136:         printf "%3s", $ratings[$i];
1.2     ! boris     137:     }
        !           138:     print "\n";
1.1       boris     139: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>