On 9 Jun 2006 at 11:55, Peter Cornelius wrote:
> The problem you're having is that you're creating a new hash
> reference in each of your if/elsif statements. I'm going to make
> some assumptions about your data since I don't know anything about
> it, but it looks like you want to group back/home/out times by day.
> If that's what you want then you've got 2 choices.
>
> 1) Go the route you're on and scant the array each time for the
> record you want to update 2) Use a hash of hash refs so you can jump
> straight to the record.
>
> Not knowing anything else about your app I would go with the second,
> which might look something like this (I haven't tried to run this):
>
> my %times; #<--- hash instead of an array
> my ($i,$key,$day,$dom,$mon,$time,$hour,$week_starting);
> #my $times; #<---- Don't need the intermediate var anymore
> while (defined($i = <FH>)) {
> next if ($i !~ /^(x|j|k|z)/);
> chomp($i);
>
> ($key,$day,$dom,$mon,$time,$hour) = ($i =~
> /^(\w)\s+(\w+)\s+(\d+)-(\w+)-\d+\s+(\d+:\d+):.*(\d+:\d+|-\d+:-\d+)/);
> my $colour = 'black';
>
>
> if ($key =~ /x/i ) {
> $times{$day . '-' . $dom } = {
> day => $day,
> dom => $dom,
> morning => $time,
> };
> }
> elsif ($key =~ /j/ ) {
> $times{$day . '-' . $dom } = { out => $time};
> }
> elsif ($key =~ /k/) {
> $times{$day . '-' . $dom } = { back => $time};
> }
> elsif ($key =~ /z/) {
> $times{$day . '-' . $dom } = { home => $time};
> }
> #push(@times,$times); #<---- Don't need to push anymore
> since it went straight onto the hash.
> }
> >
>
> I'm using the $day-$dom key but that's probably not unique enough.
> You probably want the full date as the key.
>
> Hope this helps,
Thanx. I opted for John's suggestion. Peter's solution would no doubt
be equally effective.
The data is to be parsed by Template-Toolkit and I am a little un-
clear about how to loop through a hash of hashes in TT.
Again thank you both for taking the time. Much appreciated.
Dp.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>