要让上下文说明我正在做的事情是作业:生成一个报告,其中包含数据文件中每个作业的最低,最高和平均分数。作业的名称位于第3列。您的报告应采用表格格式,如以下示例所示;输入是具有5列的csv文件:“学生”,“类别”,“作业”,“得分”和“可能得分”。
这是我的代码:
#!/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,而带有for循环的else永远不会执行,因此$ VAL的值始终等于1,并且永远不会填充数组。
我知道代码可能效率很低,但是我仍然想解决为什么它不起作用。