in reply to Sorting through a rollover

Add 1000000, sort on that, subtract 1000000.

Update: man, that is just not right.

Replies are listed 'Best First'.
Re^2: Sorting through a rollover
by onegative (Scribe) on Feb 10, 2005 at 19:37 UTC
    MAN THAT AIN'T RIGHT! How simple, it was staring me in the eyes and I couldn't see the tree for the forest. I was trying to make a mountain out of an ant hill. Thanks a lot, that is the definative answer that requires very little in terms of logic.
    THANKS everyone else, but trammell is my HERO today.
    Thanks again!
      Well if anyone was interested, this is what I did to correct my issue:
      Orignal Code Snipet
      opendir(CacheDir,$Cache) || die "Couldn't open the directory $Cache: $ +!\n"; @filelist=grep { /[0-9]{5}/ } readdir(CacheDir); closedir(CacheDir); @sortlist=sort {$b <=> $a} @filelist; for ($i=0;$i<$MsgCount;$i++) { $filename=$sortlist[$i]; if ($filename) { open(ITEM,"$Cache/$filename");

      New Code
      opendir(CacheDir,$Cache) || die "Couldn't open the directory $Cache: $ +!\n"; @filelist=grep { /[0-9]{5}/ } readdir(CacheDir); closedir(CacheDir); $z=0; while($filelist[$z]){ if ($filelist[$z] =~ /[0][0][0-1][0-9][0-9]/){ $bigfilelist[$z]=int($filelist[$z]+100000); } else{ $bigfilelist[$z]=$filelist[$z]; } ++$z; } @sortlist=sort {$b <=> $a} @bigfilelist; $i=0; while($sortlist[$i]){ $filename=int($sortlist[$i]); if($filename > 100000){ $filename=int($filename-100000); } else{ $filename=int($filename); } $filename=sprintf("%05d", $filename); ++$i; if ($filename) { open(ITEM,"$Cache/$filename");

      Again I wanted to thank everyone for their input, I still learned a few things that I will use in the future.
      Danny
        OK, I was wrong the first time...
        $flag=""; $flag = grep {/[0][0][0-1][0-9][0-9]/} @filelist; $flag2 = grep {/[9][9][8-9][0-9][0-9]/} @filelist; if ( $flag && $flag2 ){ $FLAG=1; } else{ $FLAG=0; } $z=0; while($filelist[$z]){ if ($FLAG eq 1 ){ if ($filelist[$z] =~ /[0][0][0-1][0-9][0-9]/){ $bigfilelist[$z]=int($filelist[$z]+100000); } else{ $bigfilelist[$z]=$filelist[$z]; } ++$z; } else{ $bigfilelist[$z]=$filelist[$z]; ++$z; } } @sortlist=sort {$b <=> $a} @bigfilelist; $i=0; while($sortlist[$i]){ $filename=int($sortlist[$i]); if($filename > 100000){ $filename=int($filename-100000); } else{ $filename=int($filename); } $filename=sprintf("%05d", $filename); ++$i;

        This is definatley correct, tested, verified. Oh well...Danny