Hi Digs27,
You have been given a load lot of help, which IMHO, are great if not better, but I thought since you mentioned CSV format, one should also look at using the likes of Text::CSV_XS like this:
use warnings;
use strict;
use Text::CSV_XS;
use Inline::Files; #Note: Used to read multiply Virtual files
my %station_data = getData( \*DATA );
my %data = getData( \*DATA2 );
for ( 0 .. $#{ $data{qw(Station)} } ) {
my $key = $data{'Code'}[$_];
print join(
" " => $station_data{'Station'}[$_],
$station_data{"S_$key"}[$_],
$station_data{"T_$key"}[$_]
), $/;
}
sub getData {
my $file = shift(@_);
my %data;
my @heading = split /[\s,]/ => <$file>;
my $csv = Text::CSV_XS->new( { binary => 1 } )
or die Text::CSV_XS->error_diag();
while ( my $row = $csv->getline($file) ) {
push @{ $data{$_} } => shift @$row for @heading;
}
return %data;
}
__DATA__
Station,S_10,S_11,S_12,S_13,S_14,S_15,T_10,T_11,T_12,T_13,T_14,T_15
1,31,29,29,31,29,29,15,14,23,15,14,23
2,33,28,23,33,28,23,17,15,23,17,15,23
3,23,27,33,23,27,33,18,16,23,18,16,23
4,25,26,28,25,26,28,23,14,15,23,14,15
5,26,26,27,26,26,27,23,18,17,23,18,17
6,27,33,31,27,33,31,14,17,18,14,17,18
7,33,29,29,33,29,29,12,18,23,12,18,23
__DATA2__
Station,Code
1,10
2,11
3,12
4,13
5,14
Output as:
1 31 15
2 28 15
3 33 23
4 25 23
5 26 18
Using the OP data. A bit limiting though.
If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author
unknown to me