Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^3: converting rows into column

by shmem (Chancellor)
on Jul 18, 2010 at 15:01 UTC ( #850161=note: print w/replies, xml ) Need Help??


in reply to Re^2: converting rows into column
in thread converting rows into column

I downvoted your post since you obviously did not read the links biohisham gave you.

Had you done so, you would surely have formatted your second post with <p></p> and <code></code> tags:

thanx so much for ur advice... actually am a new in perl monk...
actually i want to make a database of mp3 songs. so after retrieving the tag info of each song..i got a output like :

Artist: Rock Title: Fusion Album: Fusion Year: 2002 Genre: Other Artist: MelB Title: who am i: Album: donny Year: 2004 Genre: Other Artist: bon jo Title: i can stay Album : Armyman Year: 2009 Genre: Other Artist: Pearl Title: Last Album: Jam Year: 1983 Genre: Other

now i want my database to be like :

Artist Title Album Year Genre ------ ----- ----- ----- ----- Rock bbb hhh 2000 POP MelB Hum por 2003 other bon jo Armyman 209 others

etc.

#!/usr/bin/perl use warnings; use strict; my %hasharray; open (my $fh, "<", "C:/songdata1.txt") or die "can't open the file"; while (<$fh>){ my ($header,$info) = split /:/; }

I dont know how to proceed futher.
plz help me out.

Now, to help you out:

  • make sure your records are separated with an empty line
  • read the input file in paragraph mode (switch -p00, see perlrun)
  • split the resulting records at "\n"(newline) into an array
  • iterate over this array, split each element into ($header,$info)
  • populate a hash (see perldata) with $header as key, $info as value
  • done iterating over the array, output the records (see perlform for formatted text output)

Code (untested!) :

#!/usr/bin/perl -p00 use warnings; use strict; open (my $fh, "<", "C:/songdata1.txt") or die "can't open the file: $!\n"; # $! gives a clue my %hash; while (<$fh>){ chomp; my @array = split /\n/, $_; for (@array) { my ($header,$info) = split /\s*:\s*/; # eliminate blanks befor +e/after ':' $hash{$header} = $info; } write; } format TOP = Artist Title Album Year Genre ------ ----- ----- ---- ----- . format STDOUT = @<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<<< +<< $hash{Artist}, $hash{Title}, $hash{Album}, $hash{Year}, $hash +{Genre} .

Instead of repeating $hash{} in format STDOUT, you could also use a hash slice:

@hash{ qw(Artist Title Album Year Genre) }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://850161]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2022-11-30 18:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?