in reply to How can I read multiple lines starting with the same number and put in to a nested array and print it to a file?

I think this is what you want. It only uses enough memory to hold the data from one element number. It assumes the file is already sorted by element number and not just sorted ascii-betically. The data will be sorted on column 1 and then on column 9.
use strict; open (INFILE, "<filename") or die "could not open file"; open (OUTFILE, ">outfilename") or die "could not open outfile"; my $line = <INFILE>; my @record = split " ", $line; ELEMENT: while (defined $line) { my $element = $record[0]; my @array; push @array, [$line, $record[8]]; while (1) { $line = <INFILE>; @record = split " ", $line; if ($element == $record[0]) { push @array, [$line, $record[8]]; } else { #sort using psudo-Schwartzian Transform @array = map {$_->[0]} sort {$a->[1] <=> $b->[1]} @array; print OUTFILE @array; next ELEMENT; } } }

--

flounder

  • Comment on Re: How can I read multiple lines starting with the same number and put in to a nested array and print it to a file?
  • Download Code

Replies are listed 'Best First'.
Re: Re: How can I read multiple lines starting with the same number and put in to a nested array and print it to a file?
by opolat (Novice) on Jul 01, 2002 at 01:58 UTC
    Thanks flounder once again, this program works and does a really good job. I would like to also thank everybody else who responded. Thank you.