Jeff Sims wrote:

> Thanks for replying.
> 
> This is basically what my input file would look like
> 
> something1    something2      something3      price           something4
> text1         text2           text3           100             text4
> text1         text2           text3           50              text4
> text1         text2           text3           200             text4
> text1         text2           text3           25              text4
> text1         text2           text3           75              text4
> text1         text2           text3           300             text4
> 
> And my output would look like this
> 
> something1    something2      something3      price           something4
> text1         text2           text3           25              text4
> text1         text2           text3           50              text4
> text1         text2           text3           75              text4
> text1         text2           text3           100             text4
> text1         text2           text3           200             text4
> text1         text2           text3           300             text4
> 
> so rather than my data structure looking like below..
> $listings[0]->{price} = 100
> $listings[1]->{price} = 50
> $listings[2]->{price} = 200
> $listings[3]->{price} = 25......
> 
> I am trying trying to change it to look like ...
> 
> $listings[0]->{price} = 25
> $listings[1]->{price} = 50
> $listings[2]->{price} = 75
> $listings[3]->{price} = 100......
> 
> I hope I explained this so it makes sense.

use strict;
my $file = "somefile.txt";

# get the data into @data

open FILE, $file || die "can't open $file";
my @data = <FILE>;
close FILE;
chomp @data;

# get the categories from line one

my @category = split / *\t+ */, shift @data;

# create an array of hashes for who knows what

my @listings;
for (my $ii = 0; $ii < @data; $ii++) {

        my @listing = split / *\t+ */, $data[$ii];
        next if @listing ne @category;  # make sure # flds right

        for (my $jj = 0; $jj < @category; $jj++){

                my $key = $category[$jj];
                my $value = $listing[$jj];
                $listings[$ii]->{$key} = $value;
        }
}

# sort the data on Price field (4th col)

# this one ignores the @listings array and just does it on the raw @data

print "\nMethod 1:\n";
my @slistings = map { $_->[0] } sort { $a->[4] <=> $b->[4] } map {
  [$_, split / *\t+ */ ] } @data;
print "$_\n" foreach @slistings;

# this one sorts the array of hashes created above

print "\nMethod 2:\n";
@slistings = sort { $a->{Price} <=> $b->{Price} } @listings;

# print sorted array (columns not sorted back to orig order)

for (my $ii = 0; $ii < @slistings; $ii++) {
        foreach (keys %{$slistings[$ii]}) {
                print "$slistings[$ii]->{$_}\t";
        }
        print "\n";
}

__END__

-- 
  ,-/-  __      _  _         $Bill Luebkert    Mailto:[EMAIL PROTECTED]
 (_/   /  )    // //       DBE Collectibles    Mailto:[EMAIL PROTECTED]
  / ) /--<  o // //      Castle of Medieval Myth & Magic http://www.todbe.com/
-/-' /___/_<_</_</_    http://dbecoll.tripod.com/ (My Perl/Lakers stuff)

_______________________________________________
ActivePerl mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to