I dont have Datetime module installed. Is there a way without using DateTime??
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 >