#!/usr/bin/perl
#
# Author: Prabu, School of Computer Science, FIU
#         prabu@cs.fiu.edu
#         2/27/2005
#
# Parses a class list (student enrollment) file (comma separated file)
# and generates two text files as
#   - text file for Excel spreadsheet input (tab separated values)
#   - class student profile text file (space separated values)
# Manually edit these text files later to correct exceptional names such as
#   Mccarthy => McCarthy
#   Macintire => MacIntire
#   A-wen => A-Wen

# check for correct number of arguments
if ($#ARGV != 0) { # in Perl, argcnt is zero for one argument
    die "Usage: $0 ClassListFile.txt \n";
}
$classListFile = $ARGV[0]; # Class enrollment file (values separated by tabs)
if (!(-e $classListFile)) {
   die "Error: file $classListFile does not exist - $!\n";
}
open(classF, "<".$classListFile) || die "cannot open input $classListFile - $!";
($className) = split(/\./, $classListFile);
$excelFile = $className . "Excel.txt";
$accessFile = $className . "Access.txt";

open(excelF, ">".$excelFile) || die "cannot open output $excelFile - $!";
open(accessF, ">".$accessFile) || die "cannot open output $accessFile - $!";

while (<classF>) {
  s/\s*$//i; # remove trailing whitespace on the current line
  s/","/	/g; # subtitute each comma with a tab
  s/"//g;
  s/@.*//;
  if ( /\d{7}/ ) { # currentline contains a seven digit PantherID
    ($name, $id, $f3, $f4, $f5, $f6, $f7, $userName, $phone) = split(/	/, $_);
    $codeWord = $id;
    $codeWord =~ s/^\d{3}(\d{4})$/$1/; # strip first 3 digits
    $userName =~ s/^\s*([^\s]+)\s*$/$1/;
    &processName();
    print excelF "$id\t$lastName, $firstName\t$userName\n";
    print accessF "$id $lastName, $firstName $userName $codeWord \n";
  }
}
close(accessF);
close(excelF);
close(classF);
exit(0);

sub processName{
# process the name field and generate two strings (lastname and firstname)
# The generated lastname/firsname should not have any space
# Capitalize only the first letter and convert the rest to lowercase
  $name =~ s/^\s*"(.*)"\s*$/$1/;
  ($surName, $firstName) = split(/,/, $name);
  $firstName =~ s/^\s*(\w)([\w\.\-]*)\s*.*$/\U$1\L$2/;
  # surName may have more than one word - process each separately
  @nameToken = split(/ /, $surName);
  $lastName = @nameToken[0];
  $lastName =~ s/^\s*(\w)([\w\.\-]*)\s*$/\U$1\L$2/;
  for ($i = 1; $i <= $#nameToken; $i++) {
   $token = @nameToken[$i];
   $token =~ s/^\s*(\w)([\w\.\-]*)\s*$/\U$1\L$2/;
   $lastName .= "_$token";
  }
}