Overall what I am trying to accomplish is to loop through a bunch of mp3
files and extract the ID3 Tag Info into a hash (%tracks) for which each key
references the filename, filepath, artist, album, tracknum, title, genre for
one file. Once I have %tracks populated I need to iterate through it and
INSERT the info into a PostgreSQL DB. I am completely open to any other
suggestion for a way to collect a dataset with a unique identifier. I've got
all the other code working, this is the last piece to my puzzel.
Thanks,
Patrick
> Jason King wrote:
>
> J. Patrick Lanigan writes ..
>
>
> >I haven't quite sorted out the more complex data structure in perl yet.
> >Anyhow, I need to take the following hash of arrays...
>
>
> you have some very confusing code there .. so let's do it one bit
> at a time
>
>
> >my %tracks = ();
>
> create a hash called tracks with zero elements
>
>
> >push @{$tracks{$filename}},
> > $_, # tracks.filename
>
> > $File::Find::dir . '/', # tracks.filepath
> > $artist, # artist.artist_name
> > $album, # album.title
> > $tracknum, # tracks.track_num
> > $title, # tracks.title
> > $genre; # tracks.title
>
> create a new element of the tracks hash using the value of the variable
> $filename as the key
>
> treat that new element as an array reference and push a bunch of
> values onto
> it
>
> assume for a secont that $filename has the value 'file1' .. at
> this point in
> the code you have something like the following structure
>
> %tracks = ( file1 => [ $_, 'some/path/', 'artist_name', 'etc...' ] );
>
> I didn't continue it .. but as well as the artist name you've got
> the album
> title, the track number, title, and genre in there .. you get the drift
>
> but you've got only one member of the %tracks hash .. it's key is
> the value
> of $filename and it's value is an array reference as above
>
>
> >for my $row ( keys %tracks ){
>
> so now we grab the keys of %tracks - of which there is only one -
> 'file1' in
> our example .. then we stick that into $row
>
> > (my $qualified_filename, my $filename, my $filepath,
> >$artist, $album, $tracknum, $title, $genre) =
> > "$row @{ $tracks{$row} }";
>
> now we create a string containing the key ('file1') then a space and then
> the values of the array referred to by $tracks{file1}
>
> it's a single value - so it goes into the first element of the
> lvalue list -
> ie. $qualified_filename
>
> the following code would have done EXACTLY the same as what you've done
> above
>
> my %tracks;
>
> $tracks{$filename} = [ $_,
> $File::Find::dir . '/',
> $artist,
> $album,
> $tracknum,
> $title,
> $genre,
> ];
>
> my $qualified_name = "$filename @{ $tracks{$filename} }";
>
> so .. as you can tell - you'll have to explain a bit more about
> what you're
> trying to do .. because it's really not clear
>
> --
> jason king
>
> A Canadian law states that citizens may not publicly remove bandages.
> - http://dumblaws.com/