in reply to Re^2: perl parsing
in thread perl parsing

Show your complete code. I can't tell what your problem is from this snippet.

I avoided a HoH (Hash of Hash) in my first code post partly because as I suspected beginners have problems with this. You are proving me right.

I suggest that use perhaps my first code that doesn't use any complicated data structures. That will be easier for you to work with?

This code took me some minutes to write. It very well could be that it will take you literally hours to understand it. You will not learn if you don't put in the effort.

Replies are listed 'Best First'.
Re^4: perl parsing
by cbtshare (Monk) on Oct 06, 2017 at 15:29 UTC

    Thank you for taking the time to assist me with this.I want to learn the HOH method, so I will try to use that in my solution with your aid.Using "print Dumper \%hash;" works and te HOH has all the info I need but I can't seem to print it out in a format I want . name device(s) <space> year My entire code is

    #!/usr/bin/perl use strict; use Data::Dumper; my $infile = 'test_file.txt'; open (IN,'<',$infile) || die ("Could not open $infile : $!"); my $name; my %hash = (); while (<IN>){ s/^\s+|\s+$//g; # trim leading/trailing spaces my ($col1,$col2,$col3) = split /\s+/,$_,4; if ($col1 eq 'name'){ $name = $col2; } elsif ($col1 eq 'device') { push @{$hash{$name}},$col2,$col3; } else { # skip line } ## ## } close IN; #print Dumper \%hash; foreach my $line (keys %hash) { print "$line\n"; foreach my $sit (keys %{$hash{$line}}) { print "$hash{$line}{$sit}\t$sit"; } }

    DATA

    name Brian device Ipad 2001 device iphone 2000 number 2 name Jason device computer 2011 number 1 name Andrew device ipad 1999 device iphone 1990

      Change this line to build a Hash of Arrays (HoA)

      #push @{$hash{$name}},$col2,$col3; push @{$hash{$name}},"$col2\t$col3"; # device year

      and change the output loop to

      foreach my $name (keys %hash){ print "$name\n"; foreach my $sit (@{$hash{$name}}){ print "\t$sit\n"; } }
      poj

        Thank you poj!!! .Can you help me understand please, how would I know not to use foreach my $sit (keys %{$hash{$line}}) when tutorials are saying I was to do it that way, but to use foreach my $sit (@{$hash{$name}}).

        Why did I need to \t when creating the hoh and not use ,<comma> when Dumper had the correct info just couldnt print it out

        #push @{$hash{$name}},$col2,$col3; push @{$hash{$name}},"$col2\t$col3"; # device year

        2017-10-08 Athanasius added code tags