Re: list-parsing problem

Gary Stainburn <[email protected]> Thu, 18 Sep 2003 10:55:31 +0100
Newsgroups gmane.comp.lang.perl.beginners,gmane.comp.lang.perl.daily.tips
Organization Ringways Garages Ltd
Message-ID <[email protected]>
On Thursday 18 Sep 2003 10:26 am, Marcus Claesson wrote:
> Hi People,
>
> I have a silly little list-parsing problem that I can't get my head
> around, and I'm sure some of you have come across it before.
>
> I have a list like this:
>
> 1	a
> 2	b
> 2	c
> 3	a
> 4	d
> 4	d
> 4	e
> 4	f
> 5	g
>
> and I want to make the first column non-redundant and collect the second
> column values on the same line, like this:
>
> 1	a
> 2	b,c
> 3	a
> 4	d,e,f
> 5	g
>
> Please note that line 4 only has one 'd'.
>
> I've tried with both hashes and arrays (don't want to confuse you so I
> won't display them here), but nothing really works...
>
> I would really appreciate any help!
>
> Marcus

Hi Marcus,

Hows about something like:

my @f=("1       a","2       b","2       c",
       "3       a","4       d","4       d",
       "4       e","4       f","5       g");

my %cols=();
foreach(@f) {
  my ($col1,$col2)=split(/ */,$_);
  $cols{$col1}.=$col2;
}
foreach (sort keys %cols) {
  print join(",",split('',$cols{$_})),"\n";
}

If you actually want the commas in the scripts, you'll need to do it either 
inside the first loop, or have a seperate loop just after.

Gary
-- 
Gary Stainburn
 
This email does not contain private or confidential material as it
may be snooped on by interested government parties for unknown
and undisclosed purposes - Regulation of Investigatory Powers Act, 2000