Annotation of db/prgsrc/validate.pl, revision 1.2

1.1       boris       1: #!/usr/local/bin/perl 
                      2: 
                      3: =head1 NAME
                      4: 
1.2     ! boris       5: validate.pl - a script to validate files for db
1.1       boris       6: 
                      7: =head1 SYNOPSIS
                      8: 
1.2     ! boris       9: validate.pl  I<file1> I<file2>....
1.1       boris      10: 
                     11: 
                     12: =head1 DESCRIPTION
                     13: 
1.2     ! boris      14: Validates files
1.1       boris      15: 
                     16: =head1 OPTIONS
                     17: 
                     18: =item B<-i> 
                     19: 
                     20: =head1 AUTHOR
                     21: 
1.2     ! boris      22: Boris Veytsman, based on a script by Dmitry Rubinstein
1.1       boris      23: 
1.2     ! boris      24: =head1 $Id: validate.pl,v 1.1 2005/03/07 02:37:51 boris Exp $
1.1       boris      25: 
                     26: =cut
                     27: 
                     28: 
                     29: my (%RevMonths) = 
                     30:     ('Jan', '1', 'Feb', '2', 'Mar', '3', 'Apr', '4', 'May', '5', 'Jun', '6',
                     31:      'Jul', '7', 'Aug', '8', 'Sep', '9', 'Oct', '10', 'Nov', '11',
                     32:      'Dec', '12', 
                     33:      'JAN', '1', 'FEB', '2', 'MAR', '3', 'APR', '4', 'MAY', '5', 'JUN', '6',
                     34:      'JUL', '7', 'AUG', '8', 'SEP', '9', 'OCT', '10', 'NOV', '11',
                     35:      'DEC', '12', 
                     36:      'Янв', '1', 'Фев', '2', 'Мар', '3', 'Апр', '4', 'Май', '5',
                     37:      'Июн', '6', 'Июл', '7', 'Авг', '8', 'Сен', '9', 
                     38:      'Окт', '10', 'Ноя', '11', 'Дек', '12');
                     39: my ($sth);
                     40: 
                     41: 
                     42: 
                     43: 
                     44: 
                     45: use strict;
                     46: 
                     47: 
                     48: sub getField {
1.2     ! boris      49:     my($desc) = @_;
1.1       boris      50:     my($key);
                     51:     my($value) = ('');
                     52:     while (<$desc>) {
                     53:        s/[
]//g;
                     54:        if ($key && /^\s*$/) {
                     55:            chomp $value;
                     56:             $value =~ s/\s+$//;
                     57:            chomp $key;
                     58:            if ($key eq 'Дата') {
                     59:                $value =~ s/^(.*)-(.*)-(.*)$/$3-$2-$1/;
                     60:                my($month) = $RevMonths{$2} || '01';
                     61:                $value =~ s/-(.*)-/-$month-/;
                     62:                $value =~ s/-00*$/-01/;
                     63:            }
                     64:            if ($key eq 'Автор') {$value=~s/\.$//;}
                     65:            return ($key, $value);
                     66:        }
                     67:        next if (/^\s*$/);
                     68:        
                     69:        if (!$key && /^(.*?)[:\.]\s*(.*)$/s) {
                     70:            $key = $1;
                     71:            $value=$2;
                     72:            next;
                     73:        }
                     74:        if ($key) {
                     75:            $value .= $_;
                     76:            next;
                     77:        }
                     78:     }
                     79:     if ($key && $value) {
                     80:         $value=~s/\s+$//;
                     81:        return ($key, $value);
                     82:     }
                     83:     return (0, 0);
                     84: }
                     85: 
                     86:                
                     87: 
                     88: MAIN: 
                     89: {
                     90:     my($key, $value, $addition);
                     91:     #
                     92:     # Inherited fields for a Tour or Tournament
                     93:     #
                     94:     my %TourFields = ('Копирайт' => 'Copyright',
                     95:                      'Инфо' => 'Info', 'URL' => 'URL',
                     96:                      'Ссылка' => 'URL', 'Редактор' => 'Editors',
                     97:                      'Обработан'=> 'EnteredBy',
                     98:                      'Дата'=>'PlayedAt');
                     99:     #
                    100:     # Inherited fields for a Question
                    101:     #
                    102:     my %QuestionFields = ('Тип'=> 'Type', 'Вид'=> 'Type', 
                    103:                          'Автор' => 'Authors', 'Рейтинг'=>'Rating', 
                    104:                          'Источник' => 'Sources',
                    105:                          'Тема' => 'Topic');
                    106:                          
                    107:                      
                    108:     my($source);
                    109:     
                    110:     my @sources;       
                    111:     while ($source = shift) {
                    112:        push @sources,glob($source);
                    113:     }
                    114:     foreach $source(@sources) {
                    115:        my $TourNum=0;
                    116:        my($PlayedAt) = '';
                    117:        my($QuestionId, $TourId, $TournamentId, $ParentId) = (0, 0, 0, 0);
                    118:        my($tournum, $qnum, $all_qnum) = (0, 0, 0);
                    119:        my (@d) = (localtime((stat($source))[9]))[5,4,3];
                    120:        $d[1]++;
                    121:        $d[1]=sprintf("%02d",$d[1]);
                    122:        $d[2]=sprintf("%02d",$d[2]);
                    123:        $d[0]+=1900;
1.2     ! boris     124:        my $CreatedAt=join('-', @d);
1.1       boris     125: 
                    126:        open INFD, $source 
                    127:            or die "Can't open input file: $!\n";
                    128:        
                    129:        $source =~ s/^.*\/([^\/]*)$/$1/;
                    130:        print STDERR "Файл: $source, дата: $CreatedAt ";
1.2     ! boris     131:        while (($key, $value) = getField(\*INFD)) {
1.1       boris     132:            last if (!$key);
                    133:            
                    134:            if ($key =~ /Мета/) {
                    135:                next;   # This is obsolete
                    136:            }
                    137:            if ($key =~ /Чемпионат/ || $key =~ /Пакет/) {               
                    138:                next;
                    139:            }
                    140:            if ($key =~ /Тур/) {
                    141:                $qnum = 0;
                    142:                $TourNum++;
                    143:                $QuestionId=0;
                    144:                next;   
                    145:            }
                    146:            if ($key =~ /Вопрос/) {
                    147:                $qnum++;
                    148:                $all_qnum++;
                    149:                next;
                    150:            }
                    151: 
                    152:            if ($key =~ /Ответ/) {
                    153:                next;
                    154:            }
                    155: 
                    156: 
                    157:            if ($key =~ /Зач[её]т/) {
                    158:                next;
                    159:            }
                    160: 
                    161: 
                    162: 
                    163:            if ($key =~ /Комментари/) {
                    164:                next;
                    165:            }
                    166: 
                    167: 
                    168:            
                    169:            my @Fields = grep { $key =~ /$_/ } keys %QuestionFields;
                    170: 
                    171:            if (scalar @Fields) {
                    172:                next;
                    173:            }
                    174: 
                    175:            @Fields = grep { $key =~ /$_/ } keys %TourFields;
                    176: 
                    177:            if (scalar @Fields) {
                    178:                next;
                    179:            }
                    180: 
1.2     ! boris     181: 
1.1       boris     182:            
                    183:            #
                    184:            # If we are here, something got wrong!
                    185:            #
                    186:            print STDERR "\nЯ НЕ ПОНИМАЮ: $key, $value!\n";
                    187:            
                    188:        }
                    189:        print STDERR "Всего вопросов: $all_qnum \n";
                    190:     }
                    191: }

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