Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Combining flat file records

by GrandFather (Sage)
on May 09, 2006 at 00:25 UTC ( #548111=note: print w/ replies, xml ) Need Help??


in reply to Combining flat file records

Another way to do it:

use strict; use warnings; my %data;
map {chomp $_->[2]; $data{$_->[0]}{$_->[1]}{$_->[2]} = ''} [split /\s+ +/] for <DATA>;
$data{$_->[0]}{$_->[1]}{$_->[2]} = '' for map [split], <DATA>; for my $num (reverse sort keys %data) { print "$num\t$_\t", (join ",", keys %{$data{$num}{$_}}), "\n" for keys %{$data{$num}}; } __DATA__ 848 05/23/06 11:00 848 05/23/06 12:30 848 05/23/06 13:00 848 05/23/06 14:00 848 05/25/06 11:00 848 05/25/06 12:00 261 05/24/06 11:00 261 05/24/06 12:30 261 05/24/06 13:00 261 05/24/06 13:00 261 05/24/06 13:00 261 05/24/06 13:00

Prints:

848 05/23/06 12:30,11:00,14:00,13:00 848 05/25/06 11:00,12:00 261 05/24/06 12:30,11:00,13:00

Update: apply jwkrahn's neat round of golf


DWIM is Perl's answer to Gödel


Comment on Re: Combining flat file records
Select or Download Code
Re^2: Combining flat file records
by jwkrahn (Monsignor) on May 09, 2006 at 03:38 UTC
    map {chomp $_->[2]; $data{$_->[0]}{$_->[1]}{$_->[2]} = ''} [split /\s+ +/] for <DATA>;
    Could be written more simply as:
    map {$data{$_->[0]}{$_->[1]}{$_->[2]} = ''} [split] for <DATA>;
    Or without using map in a void context:
    $data{$_->[0]}{$_->[1]}{$_->[2]} = '' for map [split], <DATA>;
    :-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://548111]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2015-07-07 03:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls