Hi all,

Here is what I have so far for this...

use strict;
# cannot remember syntax for "use warnings but no 'uninitialized'

my ($album, @upc_list);

my @data_src = parse_data();

print "Data Source: ";
print "$_ " foreach @data_src;
print "\n";

# test
my $album1 = $album->{$upc_list[0]};

foreach ([EMAIL PROTECTED]>{track}} -1) {
    print "   $album1->{track}[$_] on $album1->{name} is sung by 
$album1->{artist}[$_]";
    print "\n";
}


# use Data::Dumper;
# print Dumper(\$album);

## SUBROUTINES ##

sub parse_data {
    my (@data_src, @headings);

    while(<DATA>) {

        next if /^K\|+/;  # skip first line
        chomp;

        # get data source information
        if (/^\|/ and scalar @data_src < 2) {
             my (undef, $tmp)  = split (/\|[^\w"]+/, $_, 2);
            $tmp =~ s/^"?([^"|]+)"?.*/$1/;
            push @data_src, $tmp if $tmp;
            next;
        }

        # get header
        if (/^[^|]/ and [EMAIL PROTECTED]) {
            @headings = split(/"?[|"]+"?/, $_, 5);
            pop @headings; shift @headings;
            foreach (@headings) {
                my($name, $upc) = split (/ UPC#: /);
                $album->{$upc}{'name'} = $name;
                push @upc_list, $upc;
            }
            next;
        }

        # 'empty' lines
        next if /^\|+/;

        parse_song_artist($_);
    }
    return @data_src;
}

sub parse_song_artist {

    # grab song/artist pairs for each album (3 pairs per line in data)
    ### See question below regarding these three lines...
    my @pairs = split /\|+/, shift, 6;
    my @songs = @pairs[0, 2, 4];
    my @artists = @pairs[1, 3, 5];

    foreach (0..2) {
        push @{$album->{$upc_list[$_]}{'track'}}, $songs[$_];
        push @{$album->{$upc_list[$_]}{'artist'}}, $artists[$_];
    }
}

__END__

Where I am stuck is on the question:

Given an @array such as 
("Title of Song", "Artist", "Title", "Another Artist", "etc"), 
is there an easy way to strip out the quotation marks. This
sounds like something for a map function -- which I'm willing
to work out for myself if you all think this is the best way.
The arrays come from the line split mentioned just above (see
"###" line). I'm splitting on "|||"s.

-Kevin


-- 
Kevin Pfeiffer


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to