LPM: RE: "on break" processing in perl?

Janine janine at emazing.com
Mon Jan 22 21:48:51 CST 2001


Sounds like you're trying to emulate the features of reporting software.  I
do this all the time - and you should know, Dave, because I talk to you
about work all the time.  (Anyone know the emoticon for pouting?)

I use multidimensional hashes.  Then you just nest a few for loops and do
what you will with the data inside the innermost loop.  Makes it easy to do
subtotals, tallies, etc, too.

I can send code snippets if anyone's interested.

Janine


> -----Original Message-----
> From: owner-lexington-pm-list at pm.org
> [mailto:owner-lexington-pm-list at pm.org]On Behalf Of David Hempy
> Sent: Monday, January 22, 2001 10:31 PM
> To: Perl Geeks
> Subject: LPM: "on break" processing in perl?
>
>
>
> I keep running into the situation where I am reading rows from a
> database,
> presenting the rows in groups and subgroups.  For example:
>
> select coursenumber, sectionnumber, ssnum
> 	from studentview
>
> This might return:
>
> CS101, 1, 000-00-1111
> CS101, 1, 000-00-2222
> CS101, 1, 000-00-3333
> CS101, 2, 000-00-4444
> CS101, 2, 000-00-5555
> CS117, 1, 000-00-1111
> CS117, 1, 000-00-9999
>
>
> I would like to display something like:
>
> CS101: 7 students
> 	Section 1: 3 students
> 		000-00-1111
> 		000-00-2222
> 		000-00-3333
> 	Section 2: 2 students
> 		000-00-4444
> 		000-00-5555
> CS117: 2 students
> 	Section 1: 2 students
> 		000-00-1111
> 		000-00-9999
>
>
> (Actually, I am usually plugging these into HTML tables, but the idea is
> the same.)
>
> I would like to do something like:
>
> while fetch {
> 	on break in $coursenumber
> 		print count($coursenumber);
> 	on break in $sectionnumber
> 		print "\t" . count($sectionnumber);
>
> 	print "\t\t $ssnum";
> }
>
>
> It's not so hard to generate the breaks by setting
> $last_sectionnumber each
> time after comparing the current $sectionnumber to the
> $last_sectionnumber.  That would suffice if I just wanted a <hr>
> or similar
> between each group.  It becomes more problematic when I want to
> telepathically print the subtotals before I've stepped through the data.
>
> I've gotten around this in the past by building up little chunks of the
> output in different scalars, then outputting all the little pieces in the
> right order when the group changes.  I then have to repeat this break
> processing again after the loop exits, assuming that any were found at
> all.  Ugh.  Double that for two-level grouping.  Double ugh.
>
> I have in some programs saved the break lines with "~SUBTOTAL~"
> in it, then
> do a s/~SUBTOTAL~/$subtotal/ later.  Effective, but embarassing.
>
>
> Anyone have any tips or methods to share?  I have a suspicion I should
> separate analysis and presentation into two passes, with some combination
> of arrays/hashes between the two.  I think I'll cipher on that
> for a while...
>
>
> -dave
>
> --
> David Hempy
> Internet Database Administrator
> Kentucky Educational Television
> <hempy at ket.org> -- (859)258-7164 -- (800)333-9764
>
>
>




More information about the Lexington-pm mailing list