Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Combining flat file records

by GrandFather (Cardinal)
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 browsing the Monastery: (9)
As of 2014-10-22 02:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (112 votes), past polls