Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Need to check CSV file and identify rows containing old end dates and end times

by blindluke (Hermit)
on Feb 04, 2015 at 18:39 UTC ( [id://1115553]=note: print w/replies, xml ) Need Help??


in reply to Need to check CSV file and identify rows containing old end dates and end times

You already have the tough part done, assuming your script works. The only thing you need is to check if the date is located in the past. This can be done using one of the many available time modules - I recommend the DateTime module, as it could end up being your default go-to module for almost anything date/time related.

Your dates can be easily parsed by DateTime::Format::HTTP. Read the docs, try improving your existing code, and ask here if you have any problems.

- Luke

  • Comment on Re: Need to check CSV file and identify rows containing old end dates and end times

Replies are listed 'Best First'.
Re^2: Need to check CSV file and identify rows containing old end dates and end times
by Anonymous Monk on Feb 05, 2015 at 15:07 UTC

    Thanks Luke, appreciate the suggestion, and I'll do that. In the meantime, I was hoping to see some code/script examples to help me solve this quicker. If someone has and scripts that can try and use the example CSV file already posted as input to the script, and show me how you'd use that as input to your own script to print out lines older than the current date (or date and time) that would really be appreciated. Point being, I can alway run the script that I show to produce the CSV file, but I need help (code) to then evaluate that CSV output to report on the rows where the end date (or end date and end time if do-able) is older than current local time script is ran. Thanks much.

      Point being, I can alway run the script that I show to produce the CSV file, but I need help (code) to then evaluate that CSV output

      It's very hard not to read the above quote as "write me the code I need". This is not the purpose of the Monastery. We're here to help, not to write code for you. If you want to learn, and you hope to see a code example to get you started on your own solution - look at the following code:

      #!/usr/bin/perl use strict; use warnings; # the following line tells Perl not to warn us against comparing # strings to numbers - we want to use this comparison later, # knowing that Perl treats the string '2015-12-01' in numeric context # just the same as the number 2015 no warnings "numeric"; use Time::Piece; my $time = localtime; my $current_year = $time->year; while (my $line = <DATA>) { my ($server, $start_d, $start_t, $end_d, $end_t) = split /,/, $lin +e; if ( $end_d < $current_year ) { print "#OLD# $server,$start_d,$start_t,$end_d,$end_t"; } else { print "$server,$start_d,$start_t,$end_d,$end_t"; } } __DATA__ aaa.aaa.net,2015-01-07,06:45:00,2015-03-31,19:00:00 bbb.bbb.net,2014-06-27,09:25:00,2015-06-27,09:40:00 ccc.ccc.net,2014-12-01,23:15:00,2014-12-06,07:00:00 ddd.ddd.net,2015-01-31,23:15:00,2015-02-23,07:00:00 eee.eee.net,2015-01-30,23:15:00,2015-02-01,07:00:00 fff.fff.net,2014-11-24,12:15:00,2014-11-25,01:00:00 ggg.ggg.net,2014-10-27,09:25:00,2014-12-15,09:40:00 hhh.hhh.net,2015-01-05,23:15:00,2015-02-01,07:00:00 hhh.hhh.net,2015-01-24,18:15:00,2015-02-24,23:00:00

      The output:

      aaa.aaa.net,2015-01-07,06:45:00,2015-03-31,19:00:00 bbb.bbb.net,2014-06-27,09:25:00,2015-06-27,09:40:00 #OLD# ccc.ccc.net,2014-12-01,23:15:00,2014-12-06,07:00:00 ddd.ddd.net,2015-01-31,23:15:00,2015-02-23,07:00:00 eee.eee.net,2015-01-30,23:15:00,2015-02-01,07:00:00 #OLD# fff.fff.net,2014-11-24,12:15:00,2014-11-25,01:00:00 #OLD# ggg.ggg.net,2014-10-27,09:25:00,2014-12-15,09:40:00 hhh.hhh.net,2015-01-05,23:15:00,2015-02-01,07:00:00 hhh.hhh.net,2015-01-24,18:15:00,2015-02-24,23:00:00

      This is a code that solves a problem similar to yours - it operates on your input and it marks all the lines in which the end year is not current as #OLD#.

      You should start by making it operate on a file, rather than the DATA section, then focus on comparing the whole date, and not just the year. Some things that will be useful to you, like the Time::Piece module, are already in place. If you are interested in the numeric comparison between '2015-03-31' and the number 2015, and how it works, read the Context tutorial, and you will find the detailed explanation in the 'More flavors of scalars' section. Good luck.

      - Luke

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1115553]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2024-04-16 06:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found