in reply to Re^5: Hash of Hashes from file
in thread Hash of Hashes from file

Thanks a lot,

Can you also let me know how do I print all websites and types for each user ?

Replies are listed 'Best First'.
Re^7: Hash of Hashes from file
by scorpio17 (Canon) on Apr 03, 2012 at 18:49 UTC

    If your data looks like this:

    %hoh = ( user1 => { Website => ['website1', 'website2', 'website3'], type => ['type1','type2','type3'], }, user2 => { Website => ['website1', 'website2', 'website3'], type => ['type1','type2','type3'], }, user3 => { Website => ['website1', 'website2', 'website3'], type => ['type1','type2','type3'], }, );
    Then try something like this (untested):
    for my $user (sort keys %hoh) { my @websites = @{ $hoh{$user}{'Website'} }; my @types = @{ $hoh{$user}{'type'} }; # assume we have the same number of each? unless (scalar(@websites) == scalar(@types)) { die "number of websites is different from number of types!"; } print "$user :\n"; for ( my $i=0; $i < scalar(@websites); ++$i) { print " $websites[$i]\n"; print " $types[$i]\n"; } print "\n"; }

    However, if you go with data like this:

    %hoh = ( # actually now a hash of arrays of hashes (HoAoH) user1 => [ { Website => 'website1', type => 'type1',}, { Website => 'website2', type => 'type2',}, { Website => 'website3', type => 'type3',}, ], user2 => [ { Website => 'website1', type => 'type1',}, { Website => 'website2', type => 'type2',}, { Website => 'website3', type => 'type3',}, ], user3 => [ { Website => 'website1', type => 'type1',}, { Website => 'website2', type => 'type2',}, { Website => 'website3', type => 'type3',}, ], );
    Then your code becomes (untested):
    for my $user (sort keys %hoh) { print "$user :\n"; # each element of this array is a hash ref for my $data ( @{ %hoh{$user} } ) { print " $data->{'Website'}\n"; print " $data->{'type'}\n"; } print "\n"; }

    So, depending on what you need to do, pick the data structure that makes your life easier.

      Logs are per line, My hash should look like the second example you have given above. I am getting syntax error for second code.

      I tried the first code given above and it works fine. I am able to get the all websites and categories for each user. Thanks a lot.

      I will now work on getting count for each Website and Type.
      Name: John Website Count google.com 10 yahoo.com 8 facebook.com 5 Type Count Search Engines 10 Entertainment 8 Social Networking 5