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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to