#!/usr/local/bin/perl
#creates grades.csv gradebook from role file downloaded from CourseWeb 
#CourseWeb's is currently tab delimited text file with each column in "
# SID NAME registrar_email seas_email major U|G  enrollment_status Lecture
#NAME is Last, First Middle
$CW_sid=0;	#these vars tell the script the locations in CourseWeb's file
$CW_name=1;
$CW_seas=3;
$CW_lecture=7;

#columns names for fields line from column_names file



$file=(shift @ARGV or "roster.tab");
open (IN, $file) or die "Can't open $file: $!\n";
@in=<IN>;
close IN;
chomp @in;

require "/w/class.01/cs/cs131/cs131ta/risc/grades/column_names";
@outline=(',') x (3+values %columns); #3 for spares
$outline[$#outline].="\n";

foreach $line (@in) {
  $line =~ s:\"::g;
  @vals=split (/\t/, $line);	#student's values
  $vals[$CW_seas]=~ s:\@.*::;
  $vals[$CW_seas]='************************' unless $vals[$CW_seas]=~ m:\w:;	#no seas gets all **
#in gradebook column for SID, put student's SID, etc
  $outline[$columns{"sid"}]=$vals[$CW_sid] . ',';	
  $outline[$columns{"lname"}]=$vals[$CW_name] . ',';
  $outline[$columns{"seas"}]=$vals[$CW_seas] . ',';
  $outline[$columns{"lecture"}]=$vals[$CW_lecture] . ',';
  push @grades, join ('', @outline);  #so there is one entry per line for sorting
}

@grades=sort bylname @grades;

#fields and averages line, what about duplicate names for a column?
foreach $field (sort {$columns{$a} <=> $columns{$b}} keys %columns) {
  $fields.=ucfirst $field .", ";
}
unshift @grades, "$fields\n";
push @grades, "Averages" . ',' x (3+values %columns) . "\n";

&writegrades;

sub bylname {#sort by last name
  @va=split (/,/, $a);
  @vb=split (/,/, $b);
  return
    $va[$columns{"lname"}] cmp $vb[$columns{"lname"}]
	or
    $va[$columns{"fname"}] cmp $vb[$columns{"fname"}];
}
