#! /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=<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;

