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