Re: [MacPerl-AnyPerl] Is there a simpler way...

[email protected] (Bart Lateur) Thu, 15 Nov 2001 13:20:55 +0100
Newsgroups perl.macperl.anyperl
Organization MediaMind
Message-ID <[email protected]>
On Wed, 14 Nov 2001 12:42:44 -0800, ehughes wrote:

>I have some simple files to parse. The data looks like this:
>
>54            6342059
>80            6342059
>31            6158566
....

>The first column is an activity code and the second column is a client id
>number.
>
>Here is my task. I need to find the number of unique individuals that
>participated in each activity. Now the boring, tedious way would be to write
>something like this:
>
>for my $row {
>   $act_54{$row1} if (column1 == "54");
>   $act_80{$row1} if (column1 == "80");
>   $act_90{$row1} if (column1 == "90");
>}
>print scalar (keys %act_54);
>print scalar (keys %act_80);
>print scalar (keys %act_90);

This looks like fake code to me.
	
>Surely, there is something that will capture the data a little easier than
>defining a variable for each activity. There are more than 30 activities.

Why don't you use a hash of hashes? Assuming that $activity can be
something like "54" and $client like "6342059", this may do:

	while(<>) {
	    chomp;
	    my($activity, $client) = split /\s+/;
	    $act{$activity}{$client}++
	}
	local($\, $,) = ("\n", " ");
	foreach my $activity (sort { $a <=> $b} keys %act) {
	      print "$activity:", sort keys %{$act{$activity}};
	}

-- 
	Bart.