Hi,
I am trying to create a line graph with GD::Graph::Lines.
I have data being passed by CGI in the format:
"ancode_1" = "ADV "
"ADV_2006" = "117216 "
"ADV_2005" = "104776 "
"ancode_2" = "BAP "
"BAP_2006" = "0 "
"BAP_2005" = "270 "
"ancode_3" = "BOO "
"BOO_2006" = "746854 "
"BOO_2005" = "673151 "
"ancode_4" = "BUS "
"BUS_2006" = "0 "
"BUS_2005" = "2476 "
"ancode_5" = "COM "
"COM_2006" = "87787 "
"COM_2005" = "97009 "
The number of years can vary so you might get data from 2006->1990.
The data looks like it is suited to a hash but GD::lines wants the
data passed to in as arrays references ([EMAIL PROTECTED]). That is one array
with all the "ancode_n" and foreach code, an array of all the yearly
values. I have managed to get my data into this type of structure
'ADV ' => [
'117216',
'104776',
]
'BAP ' => [
'0',
'270',
],
But I am stuck trying to get it out into n number of arrays that I
can pass to GD. I don't want to pre-declare n number of arrays as the
number may vary and because I am using strict, I don't know how I can
pass the data out of whatever loop I use to get to the values.
my $gd = GD::Graph::lines->new(600,400);
my @data = ([EMAIL PROTECTED],[EMAIL PROTECTED], a number of arrays equal to
size of
@ancodes);
This is the bit of code I use to generate the hash of arrays
use GD::Graph::hbars;
use GD::Graph::lines;
use GD::Graph::Data;
use CGI qw/:standard/;
use Data::Dumper;
use strict;
use warnings;
my $q = new CGI;
my @par_names = $q->param;
my (@cl_type,@values,@years,);
my %yrs;
my $current_code;
for (my $i = 0; $i < $#par_names; ++$i) {
if ($par_names[$i] =~ /ancode_\d+/) {
$current_code = $q->param($par_names[$i]);
push(@cl_type,$q->param($par_names[$i]) );
}
if ($par_names[$i] =~ /\w{3}_\d{4}/) {
(my $y) = ($par_names[$i] =~ /\w{3}_(\d{4})/);
if (! exists($yrs{$y}) ) { # only accept yrs not
seen.
$yrs{$y} = 0;
}
my $val = $q->param($par_names[$i]);
(my $value = $val) =~ s/\s+$//;
push @{$values{$current_code}},$value;
}
}
Can someone offer me some pointers here? I am struggling to do this
and I expect there is a short-hand way to achieve what I want.
TIA.
Dp.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>