how about: foreach(sort {$a->[0] cmp $b->[0]} @AoA){ #sort by the first element of the array created #by dereferencing each element of @AoA
-----Original Message----- From: Paul Kraus [mailto:[EMAIL PROTECTED]] Sent: Thursday, January 30, 2003 1:32 PM To: 'Perl' Subject: Sorting a 2dim array / Spreadsheet::WriteExcel I am dumping rows of an array into an excel file. I would like those rows to be sorted. If I wanted them to be sorted by the first elements how would I do it? Code ---- #!/usr/bin/perl -w use strict; use Spreadsheet::WriteExcel; open IN, ($ARGV[0]); my @AoA; while (<IN>){ chomp; push (@AoA,[(split /\|/,$_)]); } my $workbook = Spreadsheet::WriteExcel->new("perl.xls"); my $endo=$workbook->addworksheet('ENDO00'); my $baue=$workbook->addworksheet('BAUE00'); my $fore=$workbook->addworksheet('FORE00'); my $fill=$workbook->addworksheet('FILL00'); my $hosm=$workbook->addworksheet('HOSM00'); my $ipos=$workbook->addworksheet('IPOS00'); my $ohio=$workbook->addworksheet('OHIO00'); my $seat=$workbook->addworksheet('SEAT00'); for my $i (0 .. $#AoA){ for my $j (0 .. $#{$AoA[$i]}) { $AoA[$i][$j]=~s/\s+$//g; $AoA[$i][$j]=~s/^\s+//g; } } my @count = (0,0,0,0,0,0,0,0); foreach (@AoA){ if (@$_[3] eq 'ENDO00'){ $endo->write_row($count[0],0,\@$_); $count[0]++;} if (@$_[3] eq 'BAUE00'){ $baue->write_row($count[1],0,\@$_); $count[1]++;} if (@$_[3] eq 'FORE00'){ $fore->write_row($count[2],0,\@$_); $count[2]++;} if (@$_[3] eq 'FILL00'){ $fill->write_row($count[3],0,\@$_); $count[3]++;} if (@$_[3] eq 'HOSM00'){ $hosm->write_row($count[4],0,\@$_); $count[4]++;} if (@$_[3] eq 'IPOS00'){ $ipos->write_row($count[5],0,\@$_); $count[5]++;} if (@$_[3] eq 'OHIO00'){ $ohio->write_row($count[6],0,\@$_); $count[6]++;} if (@$_[3] eq 'SEAT00'){ $seat->write_row($count[7],0,\@$_); $count[7]++;} } Output (excel file) - I would like each sheet sorted by year. ------------------- Year item description vend sale qty prod code 1999 10011 Knee Platform Assy KT Univ Mark V SEAT00 266 4 ENDO 2000 10011 Knee Platform Assy KT Univ Mark V SEAT00 71 1 ENDO 2001 10011 Knee Platform Assy KT Univ Mark V SEAT00 216 3 ENDO 2002 10011 Knee Platform Assy KT Univ Mark V SEAT00 72 1 ENDO 2000 10073 Knee Platform Assembly for Mark V SEAT00 82 2 ENDO 2001 10073 Knee Platform Assembly for Mark V SEAT00 87 2 ENDO In fact if I could sort it by year and then decending order within year for sales that would be perfect or better yet sorted and then each year having a total line and then a space before the next year. Thanks!! -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]