> [..]
> > I will try and explain again what I am trying to do.  
> > I read in a file with a list of 
> > rooms....Then im trying to list the room once and then count 
> > how many records match for the select statement and only 
> > print the building once with a count in front of it.. 
> > 
> > db:
> > date build  room  dept
> > ##   211    30      22
> > ##   211    30      22
> > ##   444    50      05
> > ##   1544    20      22
> > ##   1544    20      22
> > ##   333    30      22
> > 
> [..]
> > 
> > My goal was to have this output:
> > For 30 :
> > 10BLD:211
> > 1BLD:333
> > For 20 :
> > 2BLD:1544
> > 
> > Thanks......
> [..]
> 
> Hi Rob,
> 
> as Wiggins already mentioned - I guess the easiest way to solve this is
> to let your database do the counting/grouping.
> 
> Just send a statement like this to your database:
> 
> SELECT count(*), build
> FROM Jun04
> WHERE dept=22 and room=20
> GROUP by build
> 

Yeh that is what I was thinking.

If this must be done in Perl for some reason, then I think the hangup
with respect to your code and the reason why moving the $cnt into the
loop is because you are sorting by the date rather than by the other
attributes, which means it is not possible to build the counts and allow
the loop scoping to reset it at the right time.

Instead I would use a data structure, probably of HoH to store the
counts as you step through the list.

Hint:
$counts->{$room}->{$build}++;

foreach my $room (keys %$counts) {
 print "Room: $room\n"; 
 foreach my $build (keys %{$counts->{$room}}) {
    print "\t$build: $counts->{$room}->{$build}\n";
 }
}

http://danconia.org

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to