> -----Original Message-----
> From: Mihir Kamdar [mailto:kamdarmihi...@gmail.com] 
> Sent: Tuesday, August 18, 2009 08:55
> To: Steve Bertrand
> Cc: beginners
> Subject: Re: script to compare dates
> 
> I dont have Datetime module installed. Is there a way without using
> DateTime??
> 
        You don't need it. You can with a little work generate what you
need. I don't have access to an open setup, so here is a shot at using
what you already have in a normal load. You will need to modify and
possibly add some checks, but all doable using std libs:

#!/usr/bin/perl

use strict;
use warnings;

use Time::Local 'timelocal';

    my %MonthNameToNbr = qw( JAN 0 FEB 1 MAR 2 APR 3 MAY 4 JUN 5 JUL 6
AUG 7 SEP 8 OCT 9 NOV 10 DEC 11);
        
    my $checkdateinsecs = timelocal(0, 0, 0, 31,
$MonthNameToNbr{q[mar]}, 109);   # generate check date once
    
    printf "checkdateinsecs: %d\n",
                                $checkdateinsecs;
    my $day;
    my $month;
    my $year;
    my @cdr = ();
    
    while ( <DATA> ) {
        chomp;
        next if ( /^\s*$/ );
        @cdr = split(/\s*,\s*/, $_);
        
        if ( $cdr[0] !~ /^.(\d+)\S(\S{3})\S(\d+)/ ) {
             #print some type of error and either continue or die
             printf "(%5d)in error:\n<%s>\n",
                                $.,
                                $_;
             next;
         }
        $day   = $1;
        $month = uc($2);
        $year  = $3;
        my $dateinsecs = timelocal(0, 0, 0, $day,
$MonthNameToNbr{$month}, $year+100);
    
        next if ( ! ( ($dateinsecs > $checkdateinsecs ) and
                $cdr[1] =~ /2.*/
                    )
                 );
        # do your other processing
        printf "dateinsecs: %d was greater (%d)\n",
                                $dateinsecs,
                                $.;
     }
__DATA__
*04-NOV-08*,2
*04-apr-09*,3
*xx-dec-08*,2
*04-apr-09*,2

Output:
[C:/CurrWrka/00Commonprlprod/src] aapl013s
checkdateinsecs: 1233385200
(    3)in error:
<*xx-dec-08*,2>
dateinsecs: 1238824800 was greater (4)


> On Tue, Aug 18, 2009 at 7:37 AM, Steve Bertrand 
> <st...@ibctech.ca> wrote:
> 
> >  Mihir Kamdar wrote:
> > > Hi,
> > >
> > > I want to write a script whose input data would be a csv 
> file and records
> > > would be as follows:-
> > >
> > > 60020003076570*,2,*20-SEP-08.01:09:18,,*04-NOV-08*
> > > ,10000,INR,,VOUCHER_BATCH_20080919_00014,2C,,0
> > > 30000000026495*,5,*20-SEP-08.01:09:57,,*31-DEC-09*
> > > ,100000,INR,,VOUCHER_BATCH_20080919_00024,1K,,0
> > > 30000000027480,*2,*20-SEP-08.01:09:57,,*31-DEC-08*
> > > ,100000,INR,,VOUCHER_BATCH_20080919_00024,1K,,0
> > >
> > > Here I want to compare whether the 5th field, which is 
> the date field
> > > is *earlier
> > > than 31-Mar-09 and 2nd field value is 2.*
> > >
> > > If yes, then I will take that record and store it in another file.
> > >
> > > Please help me as to how do I compare dates, preferably 
> with some sample
> > > code.
> > >
> > > I started coding for this as below, but am stuck on how 
> to compare date
> > in
> > > my input with another date.
> > >
> > > #!/usr/bin/perl
> > > use strict;
> > > use warnings ;
> > >
> > > open (my $IN_FILE,"<","testdata.txt") or die $!." file 
> not found" ;
> > > while (my $line=readline($IN_FILE))
> > > {
> > >         my @cdr=split (/,/, $line) ;
> > >         if($cdr[5]
> > >         .............
> > >         .............
> > > }
> >
> > For fun, and to try out a few things I came across in 
> Damian's book. I
> > use DateTime to manage all aspects of dates and times. The 
> code below
> > assumes that all records will always be in the exact same format.
> > Criticism welcome:
> >
> >
> > #!/usr/bin/perl
> >
> > use strict;
> > use warnings;
> >
> > use DateTime::Format::Strptime;
> >
> > my $EXTRACTION_LAYOUT = '@16 A1 @40 A9';
> >
> > VOUCHER_RECORD:
> >
> > while ( my $record = <DATA> ) {
> >
> >    my ( $important_num, $date_string )
> >        = unpack $EXTRACTION_LAYOUT, $record;
> >
> >    next VOUCHER_RECORD if $important_num != 2;
> >
> >    my $static_date = DateTime->new(
> >                        year => 2009,
> >                        month => 3,
> >                        day => 31
> >                        );
> >
> >
> >    # turn the extracted date string into a DateTime object
> >
> >    my $date_formatter
> >        = new DateTime::Format::Strptime( pattern => '%d-%b-%y' );
> >
> >    my $voucher_date
> >        = $date_formatter->parse_datetime($date_string);
> >
> >
> >    # compare the DateTime compiled dates
> >
> >    if ( DateTime->compare( $static_date, $voucher_date )) {
> >
> >        print "Voucher ${voucher_date} is prior to ${static_date}" .
> >              ".... and the important number is 2\n";
> >    }
> > }
> >
> > __DATA__
> >
> > 
> 60020003076570*,2,*20-SEP-08.01:09:18,,*04-NOV-08*,10000,INR,,
VOUCHER_BATCH_20080919_00014,2C,,0
> >
> > 
> 30000000026495*,5,*20-SEP-08.01:09:57,,*31-DEC-09*,100000,INR,
,VOUCHER_BATCH_20080919_00024,1K,,0
> >
> > 
> 30000000027480,*2,*20-SEP-08.01:09:57,,*31-DEC-08*,100000,INR,
,VOUCHER_BATCH_20080919_00024,1K,,0
> >
> > Steve
> >
> 

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to