Чтобы дать представление о том, что я делаю, это задание: создайте отчет, содержащий самые низкие, самые высокие и средние оценки для каждого задания в файле данных. Название задания находится в столбце 3. Ваш отчет должен быть в табличной форме, как показано в примере ниже; Входные данные представляют собой CSV-файл с 5 столбцами: студент, категория, назначение, оценка и возможная оценка.
Вот мой код:
#!/usr/bin/perl
@NAMES[0]="first";
my $COUNT=0;
@AVERAGE[0]=0;
@HIGH[0]=0;
@LOW[0]=0;
my $VAL=0;
@SUM[0]=0;
@COUNT_SUM[0]=0;
while(<>){
chomp;
@array=split(/,/,$_);
my $name=@array[2];
my $score=$array[3];
if($name=="Assignment"){
$VAL=1;
}
else{
for($i=0;$i<=$COUNT;$i++){
if($name==$NAMES[$i]){
$VAL=$i;
print "it runs\n";
print $name."\n";
print $NAMES[$i]."\n";
$SUM[$i]=$SUM[$i]+$score;
$COUNT_SUM[$i]++;
if($name>$HIGH[$i]){
$HIGH[$i]=$score;}
if($name<$LOW[$i]){
$LOW[$i]=$score;}
}
}
if($VAL == 0){
$COUNT++;
$NAMES[$COUNT] = $name;
$SUM[$COUNT]=$SUM[$COUNT]+$score;
$COUNT_SUM[$COUNT]++;
$LOW[$i]=$score;
$HIGH[$i]=$score;
}
$VAL=0;
}
for ($i=1;$i<=$COUNT;$i++){
$AVERAGE[$i]=$SUM[$i]/$COUNT_SUM[$i];
}
print "Name"."\t"."Low"."\t"."High"."\t"."Average\n";
for ($i=1;$i<=$COUNT;$i++){
print $NAMES[$i]."\t".$LOW[$i]."\t".$HIGH[$i]."\t".$AVERAGE[$i]."\n"
}
Я тестировал различные вещи, чтобы изолировать проблему, поскольку она только печатает строку «Имя Низкое Высокое Среднее» без фактической информации под ней. Так или иначе, оператор if всегда равен true, а else с for для l oop никогда не выполняется, поэтому значение $ VAL всегда равно 1, и массивы никогда не заполняются.
Я знаю, что код может быть неэффективным, но я все еще хочу выяснить, почему он не работает.