Update the program you wrote for regular expressions to use file constructs.
Your program will process entries in an array
a file. Each entry in the array
line in the file consists of
one name and one phone number, separated by a semicolon. The name
and phone number could have leading and trailing blanks. Here is
the array the content of the file that you will use:
Evergreen Valley College; 274-7900 Dijsktra, Edsger W. ; 510-555-0297 Hoare, C. Anthony R.; 312 555-8763 Key Point Software; 249-6625 O'Reilly & Associates; (800)775-7731 Peterson 3rd, Gordon E.; 217-555-1212 Bad Phone Number ; 408 375 - 27651
You will add several items to the array
lines to the file, according to
the following rules. Names come in two forms:
Dijkstra, Edsger W. Hoare, C. Anthony R. Peterson 3rd, Gordon E.
Evergreen Valley College O'Reilly & Associates Key Point Software
Phone numbers come in several forms, and only in these forms:
Your program must pass the name to a subroutine called process_name. This subroutine will convert the name to "first-name-first" form and return that value. Your subroutine must use regular expressions! Names without a comma do not get changed. Thus:
Dijkstra, Edsger W. becomes Edsger W. Dijkstra Hoare, C. Anthony R. becomes C. Anthony R. Hoare Peterson 3rd, Gordon E. becomes Gordon E. Peterson 3rd Key Point Software remains Key Point Software Evergreen Valley College remains Evergreen Valley College
Your program must pass the phone number to a subroutine called process_phone. This subroutine will convert the phone number as shown below. If no area code was given, use 408. Put a blank after the right parenthesis! This subroutine also must use regular expressions. If the phone number is not in the proper format, your subroutine must return the null string.
274-7900 becomes (408) 274-7900 510-555-0297 becomes (510) 555-0297 312 555-8763 becomes (312) 555-8763 (800)775-7731 becomes (800) 775-7731
Your output should be a file containing the list sorted by phone number. Include only entries with valid phone numbers. Here is an example of what the output file will look like. The columns must line up.
Phone Name ----- ---- (217) 555-1212 Gordon E. Peterson 3rd (312) 555-8763 C. Anthony R. Hoare (408) 249-6625 Key Point Software (408) 274-7900 Evergreen Valley College (510) 555-0297 Edsger W. Dijsktra (800) 775-7731 O'Reilly & Associates
The name of your program will be in the form lastname_firstname_files.pl. Your program will get the name of the input file and output file as two arguments on the command line. For example, if your name is Chong Yi and your input file is named phonelist.txt and the output file is named sortedlist.txt, you would invoke the program with this command:
perl yi_chong_files.pl phonelist.txt sortedlist.txt
Your program must determine whether the output file already exists. If it does, you must prompt the user and ask if she wishes to delete the old file first. If the answer is Y, write the output file. If the answer is N, give an appropriate message and exit. If the answer is neither Y nor N, repeat the prompt until you get valid input. (You must accept the letter in either upper or lower case, possibly with leading and trailing blanks. Hint: Use pattern matching.)
Your program must not be tied to this specific data!
You can’t presume that nobody will have a hyphen in their name, or
that double quotes will never appear in a name, or that all people will
have a middle name with a period in it. For example, your program must
be able to handle
companies named It's-It Ice Cream Sandwiches
and
The "Heimlich Maneuver" Cafe
;
or people named
Hapsburg-Hohenzollern, Teresita
Truman, Harry S
Adair, John "Red"
...but again, not just these particular examples. The only thing you can count on is that your input follows the rules described above. The names you add to your file must be in addition to the examples above.
Don’t be too clever!
You do not need to do all the pattern matching for
names or phone numbers with one huge pattern. It may be easier
to use several if
statements, each with a
simple pattern match.
When processing names, don’t make a big production out of it. The rules are simple; your code should be too. Think: what distinguishes a company name from a person’s name?
Name your file lastname_firstname_files.pl and email it to the instructor, along with your input file.