in reply to script to do a foreach on an array of strings outputting the title row and each string element vertically

Hello, you need to normalize somehow your data before elaborating the results: infact you have at least 2 field of two separaated words and at least the value of the name of the keeper with a space (the code below is broken for a keeper named just 'Tarzan' as for one named 'Vladimir Ilyich Ulyanov').
You can practice splice to modify the fields outside the loop, considering just the first line. In the loop you'll join firstname+lastname to have a singular field for them.
After this sanitazing work, the game is simple. I leaved some helpfull debugging print statement commented, to see how splice works (i not use it so often...)
use strict; use warnings; my @fields = split /\s+/, <DATA>; # print "BEFORE: ",(join '|',@fields),"\n"; my $prem_et = $fields[7].' '.$fields[8]; splice @fields,7,2,$prem_et; my $nd_al = $fields[8].' '.$fields[9]; splice @fields,8,2,$nd_al; # print "AFTER: ",(join '|',@fields),"\n"; while (<DATA>){ chomp; my @entries = split /\s+/,$_; # look at @entries before joining the name # print +(join '|',@entries),"\n"; my $name_with_space = $entries[1].' '.$entries[2]; # see the doc for splice: we remove item 1,2 and replace t +he with a single # $name_with_space splice @entries,1,2,$name_with_space; # UPDATE for null age @entries = (@entries[0..4],'',@entries[5..$#entries]); # but since we learn 'splice' we can do with it too: # splice @entries,4,1,$entries[4],''; # look at entries after splice # print +(join '|',@entries),"\n"; # foreach index of entries we print both corresponding fie +ld and entry print map {"$fields[$_]\t$entries[$_]\n" } 0..$#entries; print "\n"; } __DATA__ Animal keepers M/F YEAR DOB AGE FSM PREM ET ND + AL EAL GIRAFFE JAMES LE M 9 10/12/2007 Y Y N N HIPPOS JACKIE LEAN F 6 11/12/2007 Y N Y Y ZEBRAS JAMES LEHERN M 3 12/12/2007 N N N Y LIONS AMIE CAHORT M 1 13/12/2012 Y Y Y N
with the output:
Animal GIRAFFE keepers JAMES LE M/F M YEAR 9 DOB 10/12/2007 AGE FSM Y PREM ET Y ND AL N EAL N Animal HIPPOS keepers JACKIE LEAN M/F F YEAR 6 DOB 11/12/2007 AGE FSM Y PREM ET N ND AL Y EAL Y Animal ZEBRAS keepers JAMES LEHERN M/F M YEAR 3 DOB 12/12/2007 AGE FSM N PREM ET N ND AL N EAL Y Animal LIONS keepers AMIE CAHORT M/F M YEAR 1 DOB 13/12/2012 AGE FSM Y PREM ET Y ND AL Y EAL N


HtH (animals too!)
L*
UPDATED: i've not noticed you also have the age value empty! i've corrected the above.
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
  • Comment on Re: script to do a foreach on an array of strings outputting the title row and each string element vertically
  • Select or Download Code