in reply to array splitting and sorting
If you want the latter (I'm guessing you do), all you have to do is to make a custom sort routine. You can either leave the lines as they are (to save on memory), or split them (to save time, perhaps, and to make it easier to deal with the data later). The easiest to demonstrate is probably to split them first:
Here, we read each line, strip off line endings, and then split it on comma boundaries. A reference to the resultant array is then pushed into the array @lines. Then we sort @lines using a custom sort routine that does a sort by the fields in order. This assumes that the first two fields are alphabetical, and the rest numeric. I'm assuming that height is in some rational form like cm.my @lines; while (<>) { chomp; my @line = split(','); push(@lines, \@line); } @lines = sort { $a->[0] cmp $b->[0] or $a->[1] cmp $b->[1] or $a->[2] <=> $b->[2] or $a->[3] <=> $b->[3] or $a->[4] <=> $b->[4] } @lines; foreach my $line (@lines) { print join(",", @{$line}) . "\n"; }
Then the program just prints out the sorted lines, with commas put back in. You can fiddle with the sort routine to make it case insensitive, etc. but the basic idea still stands.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: array splitting and sorting
by Anonymous Monk on Jun 01, 2001 at 08:55 UTC | |
by tachyon (Chancellor) on Jun 01, 2001 at 09:55 UTC |