#! /usr/local/bin/perl #This script reads $file each line of which has a seas_account score pair, like #cs131xx 52 #cs131ta 35.6 #Note that decimal values are allowed, but there must be a leading 0 for scores <1. #cs131aa 0.5 #Just .5 will not be seen. The script opens grades.csv and places these grades in #the column specified. Column can be a number (0 based reference of columns) or a word #from column_names $file=shift @ARGV; require "/w/class.01/cs/cs131/cs131ta/risc/grades/column_names";#has column labels and indexes $column=convert_col (shift @ARGV); if ($file eq "" || $column !~ m:\d+: || $column==0) { print "Syntax is add-scores filename column_number filename should be a list of \'seas_account score\' with one pair per line (no quotes) column names can be used inplace of number (hw1pa, hw2wa, mid, ... \n"; exit; } open (IN, "$file") or die "Can't open $file: $!\n"; @in=; close IN; foreach $line (@in) { if ( $line =~ m:(\w+) (\d+(\.\d*)?): ) { $seas=$1; $score=$2; $scores{$seas}=$score; $sum+=$score; $count++; } else {print "error in $line";} } $seas=""; &readgrades; $fields=shift @grades; $avg=pop @grades; foreach $line (@grades) { chomp $line; @sgrades=split (/,/, $line, -1); $account=$sgrades[$columns{"seas"}]; if ($scores{$account} =~ m:\d:) {#found grade for this student $val= $scores{$account}; delete $scores{$account}; if ($sgrades[$column] >0) {#already have grade print "$account already had $sgrades[$column], now its $val\n"; } $sgrades[$column]=$val; $line=join (",", @sgrades); $line .="\n"; } else { push @nograde, $account; $line.="\n"; } } $average=sprintf ("%3.1f", $sum/$count); #compute average, put in place, put back in @ chomp $avg; @avgs=split (/,/, $avg, -1); $avgs[$column]=$average; $avg=join (',', @avgs); $avg.="\n"; push @grades, $avg; print "Average for $count was $average\n"; unshift @grades, $fields; #put fields line back foreach $seas (sort keys %scores) { print "$seas got $scores{$seas}, not found in grade book\n"; } if (@nograde) { @nograde=sort @nograde; print "Following SEAS have no grades: @nograde\n"; } `back`; &writegrades;