Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Extracting non-consecutive but related items from an array.

by robartes (Priest)
on Jun 15, 2005 at 08:55 UTC ( #466835=note: print w/ replies, xml ) Need Help??


in reply to Extracting non-consecutive but related items from an array.

This is just the thing hashes exist for:

#Untested use strict; my %data; #assume file is opened as <INPUT> while (<INPUT>) { chomp; my ($server,@apps_info)=split /,/; push @{$data{$server}}, \@apps_info; } foreach my $server ( keys %data ) { print "$server\n\t"; for ( @{$data{$server}} ) { print join " ", split /,/; print "\n\t"; } }

Basically, pull all of the data into a hash with the server name as keys.

Update: Updated as per Tomtom's remark

CU
Robartes-


Comment on Re: Extracting non-consecutive but related items from an array.
Download Code
Re^2: Extracting non-consecutive but related items from an array.
by Tomtom (Scribe) on Jun 15, 2005 at 08:59 UTC
    Isn't it supposed to be $server instead of $_ ?
      Isn't it supposed to be $server instead of $_ ?

      Yup - that's why it says #Untested :). Thanks!

      CU
      Robartes-

      Yes, I think its $server too....Thanks guys.

      But, Can I have simple breakup of this code?
      print $_, $/, map { "\t@$_$/"} @{$clean_data{$_}} for sort keys %clean_data;
      And, why did we have to reference \ @apps_info? couldn't we use it without referencing?
      Blackadder
        And, why did we have to reference \ @apps_info? couldn't we use it without referencing?

        No particular reason, it's just that that's the way I like doing things. This way, the information contained in one line in the input file stays readily identifiable (it's one element of the array for that server), whereas pushing on the first level array would result in a flat list. But it's just a preference thing, I guess.

        CU
        Robartes-

        $/ is the The input record separator, newline by default (see the perlop man page; type perldoc perlop and find it). The code you posted could be re-written like this:
           foreach my $key (sort keys %clean_data) {
             print $key, $/;
             foreach my $data (@{$clean_data{$key}}) { 
            # the hash value $clean_data{$key} is an array reference
            # wrapping it in @{} gives us the array it references.
            # this array contains array references, 
            # so @$data gives us an array
                print "\t", @$data, $/;
             }
           }
        
        - Dotan

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2014-12-27 12:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls