Perl Code Snippets!

Free to a good home. No warranties expressed or implied. If I have an attribution in the snippet, please keep it. Otherwise, you're on your own.

Parsing comma delineated output:

This was written on the fly in response to an individual who needed to parse comma delineated output that sometimes had commas in the field itself, like so:

4/11/99,18:30,20:00,Women's Discipleship Group,A,Normal,,
4/11/99,19:00,21:00,"Jr. High Meeting, Sr. High Home Group",,Normal,,

# -----------------------------
# start snippet, formatted for readability
# open the file, start chunking through it, line by line

while (defined ($line = FILE)) {
     next if $line =~ /^\s/;                   # Skip blank lines 
     if ($line =~ m/^(\d{1,2}\/\d{1,2}\/\d{2,4}), # capturedate
        (\d{1,2}:\d{1,2}),                     # capture tstart
        (\d{1,2}:\d{1,2}),                     # capture tend
        (.+),                                  # capture verbiage
        ([A-Z]*),                              # capture code
        (\w+),                                 # capture type
        (.+),                                  # capture misc
        $/x)    {                 # end regex with "/x" 
# start consequences
# set variable to regex captures
     ($date, $tstart, $tend, $verbiage, $code, $type, $misc) = 
        ($1, $2, $3, $4, $5, $6, $7);           
# do the html or whatever...
print "$date, $tstart to $tend
$verbiage<\td>\n"; ) else { # find glitches print "Bad Record: $line\n"; }; # end if # do other stuff, like finish off table here }; # end while # --------------------------------

The key here is the parentheses in the regex, which can be used to collect the items you want in special variables $1 to $n (where n is a number). Please note that this code has not been tested on a "live" system (to my knowledge) and may contain errors. Pobody's nerfect.

~~ Got any goodies that you think I should include? Drop me an e-mail at ljl @ ~~

Page created: March 28, 2000. Page last changed/tweaked on 08/20/2002