in reply to complex input file

Something like this?
use strict; use warnings; chomp(my @title = split /\s+/, <DATA>); my %emp; while (<DATA>) { chomp(my @r = split/\s+/); push @{$emp{$r[0]}}, [ @r[1..$#r] ]; } foreach (reverse sort keys %emp) { print "$_"; foreach (@{$emp{$_}}) { print "\t$_->[0]\t$_->[1]\n"; } } __DATA__ EmpNum LOCATION Shift 23 54 1 11 65 3 23 54 2
And the output -
23 54 1 54 2 11 65 3

Updated: solution 2
use strict; use warnings; use Data::Dumper; chomp(my @title = split /\s+/, <DATA>); chomp(my @data = <DATA>); my @sorted_data = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [/^(\d+)/, $_] } @data; my $last_emp = ''; foreach my $d (@sorted_data) { $d =~ s/^$last_emp\b/' ' x length($last_emp)/e; $d =~ /^(\d+)/ and $last_emp = $1; print "$d\n"; } __DATA__ EmpNum LOCATION Shift 23 54 1 11 65 3 23 54 2

Replies are listed 'Best First'.
Re: Re: complex input file
by Anonymous Monk on Feb 18, 2004 at 05:06 UTC
    thanks much , I like the second since I don't understand Hash table. thanks again Roger
      I thought the second one was more complicated than the first one? :-)

Re: Re: complex input file
by Anonymous Monk on Feb 18, 2004 at 05:36 UTC
    Roger , I am new to perl . Would you mind explaining this part to me in your first answer :
    print "\t$_->[0]\t$_->[1]\n";
    since if I add one more column in the DATA file , I do this :
    print "\t$_->[0]\t$_->[1]\t$->[2]\n";
    but the output stay the same , I don't get the last column. Sorry for asking tooo many questions
      print "\t$_->[0]\t$_->[1]\t$->[2]\n";

      Contains a typo, it should be:

      print "\t$_->[0]\t$_->[1]\t$_->[2]\n";

      $_ is a special perl variable.

        I fixed it but not sure if we are reading up to three column at the top ,, all I did is changing the DATA to
        EmpNum LOCATION Shift Hours 23 54 1 2 11 65 3 5 23 54 2 7
        then I modify it to
        print "\t$_->[0]\t$_->[1]\t$_->[2]\n";
        but get the same output
        23 54 1 54 2 11 65 3
        I know the first one is harder , but cleaner :-)
        got it to work now ,, I was hardcoding somthing :-)