in reply to Re: sort strings by date
in thread sort strings by date

No, no. That's old school. (:

#!/usr/bin/perl -w use strict; my @list= <DATA>; @list= @list[ map { unpack "N", substr($_,-4) } sort map { join "", ( $list[$_] =~ m[(\d+)/(\d+)/(\d+):([\d:]+)] )[2,1,0,3], pack "N", $_; } 0..$#list ]; print @list; __END__ G: CCCCC-01 :ADD : ORDER PROCESSED : *** OK ***:08/30/2003:14:24:58 G: CCCCC :MODIFY : ORDER PROCESSED : *** OK ***:08/28/2003:14:24:58 G: CCCC1 :ADD : ORDER PROCESSED : *** OK ***:08/29/2003:14:49:54

                - tye

Replies are listed 'Best First'.
Re: Re^2: sort strings by date
by LeeC79 (Acolyte) on Sep 05, 2003 at 12:39 UTC
    Very nice. Now, I'm sorry, you shouldn't have to hold my hand, but I'm very new to Perl. Could you explain to me how I would I, instead of providing the strings the way you have done it, provide it with a file to read one line at a time and then ouput to another file. Thanks very much.

      Simply replace <DATA> with <INPUT> and open INPUT before that.

      to read one line at a time

      I'm not sure if you meant something specific there, but I usually avoid reading entire files into memory so I wonder if you were also hoping to avoid that. So just to be clear: When sorting, you have to read the entire file before you can output the first record.

      To write to another file, open it (say to the handle OUTPUT) and specify that handle in the print statement with no comma after it: print OUTPUT @list;.

      Or, to be very explicit, safe, and write code that even works prior to v5.6 of Perl:

      use IO::Handle; my $infile= "input.txt"; my $outfile= "sorted.txt"; my $in= IO::Handle->new(); open $in, "< $infile\0" or die "Can't read $infile: $!\n"; my $out= IO::Handle->new(); open $out, "> $outfile\0" or die "Can't write $outfile: $!\n"; my @list= <$in>; close $in; # ... sort code here ... print $out @list;

                      - tye