Class List for Fall 1999 BIOL302L0402

classlists at classlists at
Thu Aug 12 14:57:00 CDT 1999

123-45-6789  APPLEJAK, ABBLE                                                       SOPHOMORE     BIOL       Reg   2.00  301-555-5555 applej1 at
321-54-9876  EINSTEIN, ALBERT I.                                                   JUNIOR        BIOL       Reg   2.00  410-555-1234 aeinst1 at
111-22-3333  KUBLE-KAHN, KRIS K.                                                   JUNIOR        VPAV/BIOL  Reg   2.00  301-555-2222 kkuble1 at

#!/usr/local/bin/perl5 -wi.bak

#"format_classlist" by JW Sandoz, Department of Biology, UMBC  
# August 25, 1999
# Normal disclaimers: Worked fine for me.  Should for you. No guarantees,
# though.

# This script formats classlists at UMBC as mailed through EASI/myUMBC 
# to a format more easily parsed into a spreadsheet.
# One needs to export the email to a file in home directory (easily done
# in Pine with 'export').  Then type 
# "parse_classlist <filename_of_classlist_that_you_exported>"
# The parsed file contains all the fields that the email class list
# holds, EXCEPT the SSN is parsed to the last four digits (I use these as
# the Password for the student).
# In addition, the umbc username is parsed so that the unique id is
# captured in the field "Login ID".  The entire email address is retained
# as well.

$x = shift;
unshift @ARGV, $x;  # capturing filename and then returning it to argv

while (<>) {
	if (m/[A-Z]+\d\d\d[A-Z]?(\d\d\d\d)/) {$sect = $1}# capture sect
		#else {}
	local $_  = lc();	# lowercases everything
	s/^\D.*//g; 	 	# removes lines without starting number
	s/^\s*$//;			# removes blank lines
	s/\d\d\d-\d\d-//g;	# leaves last 4 digits of ssn
	s/(\w+.*,)\s(\w+\.?)?(\s+)(\w)/$1$2$3$4/; #capturing names
	s/\s{2,}\b/,/g; #replace multiple space with ','
	s/\s+,/,/g; 	#remove spaces before existing ','s
	s/(\d)\s/$1,/;	#puts a comma at the end of the phone number
	s/  / /;		#removes one of the spaces if two exist
	s/(_{9,12}) /$1,/; #puts comma at end of dashes (no phone #)
	s/([-])([a-z])/$1\u$2/g; #Caps second (hyphenated) name
	s/ (\w)/ \u$1/;	#removes leading space from MI and uppercases it
	s/(\w+)(\@.*)/\l$1,\l$1$2/; #separate username into Login ID + username
	if ($1) {
	print "$sect," . $_;  # prints changes to file
	}		#prepends the section number to each student's record. Useful
			#if a course has more than one section.
open (FILE, "$x") or die $!;
	@a = <FILE>; 
close FILE;

#the following prettifies the text: leading caps instead of all caps

@proper = map {(my $y = $_) =~ s/\,(.)/\,\u$+/g; $y } @a;
	#oops. It uppercases the username as well.
@proper2 = map {(my $y = $_) =~ s/\,([A-Z]\w{1,6})\,([A-Z]\w{1,6}\@)/\,\l$1,\l$2/; $y } @proper;
# @proper2 fixes (lowercases) username 

unshift @proper2, ('Sect,','SSN,','Last Name,','First Name,','Standing,','Major,','Grade_Method,','Credits,','Phone,','Login ID,','email',"\n");
# above adds a heading for each field

open (FH2, ">$x") or die $!;
	print FH2 @proper2; # writes to the file
close FH2;

Mr. James W. Sandoz, Instructor, UMBC Dept of Biol Sciences,  
				 1000 Hilltop Circle
				 Catonsville, MD 21250
voice: (410) 455-3497; fax: 455-3875; net: sandoz at

More information about the Baltimore-pm mailing list