473,761 Members | 10,057 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

date comparison of files with if statements not working

154 New Member
Hi the purpose of the script I am trying to do is to access a dir and run the ls -l command which will show the files and the modified date, no w the script is to check two files in that dir , if the file has the modified month and day matching today print message log is fine else the log is not updated and thats it.

Now the script below I managed to parse to get both month and day for the files and the perl day and month

now the script shows successful when showing today but i changed the perl time to yesterday's date by hard coding a value and it still shows the log updated message when it suppose to show log not updated, so it is a problem i am guess ign with my else but i think i did it correct but i cannot seem to find where i am going wrong, could somebody help me out please.

Expand|Select|Wrap|Line Numbers
  1. #!/usr/bin/perl
  2. #Purpose: Monitor script to monitor if logs is todays date
  3.  
  4. #Uncomment to use live perl time
  5. # @datepcs = split(/\s+/, scalar localtime);
  6. #    printf ("%s %s %s\n", @datepcs[1,2]);
  7.  
  8. #comment to remove hard coded value
  9. $dateTime ="Jul 26";
  10. print $dateTime;
  11.  
  12. chdir("/home/tibco/tibco/ACS_MQ_ADAPTER/logs");
  13. sleep 2;
  14. $test = "ls -l |";
  15. open (INFO, "$test") || die " Unable to run command $!";
  16. @rows = <INFO>;
  17.  
  18. open (TEST, ">/home/tibco/tibco/acs_monitor.txt") || die " Error could not open log $!";
  19. foreach (@rows) {
  20.  
  21.     if ($_ =~ m/MQJMSListener.log/) {
  22.         ###### Writing to file
  23.         print TEST "$_";
  24.         $_ = split;
  25.         $dates = "$_[5]";
  26.         $dates2 ="$_[6]";
  27.         print $dates . " $dates2";
  28.         #if ($dates . " $dates2" == "$dateTime") {
  29.         if ("$dateTime" == $dates . " $dates2") {
  30.             print "\n This $_[8] is fine \n";
  31.             print TEST '<span class="green">This log matches todays date</span><br>';
  32.         } else {
  33.             print "\n Dates do not match for $_[8] \n";
  34.             print TEST '<br><br><span class="red">This log does not match todays date</span><br>';
  35.         }
  36.     }
  37.  
  38.     if ($_ =~ m/EMSListener.log/) {
  39.         ###### Writing to file
  40.         print TEST "$_";
  41.         $_ = split;
  42.         $dates = "$_[5]";
  43.         $dates2 ="$_[6]";
  44.  
  45.         if ($dates . " $dates2" == "$dateTime") {
  46.             print "\n This $_[8] is fine \n";
  47.             print TEST '<span class="green">This log matches todays date</span><br>';
  48.         } else {
  49.             print "\n Dates do not match for $_[8] \n";
  50.             print TEST '<span class="red">This log does not match todays date</span><br>';
  51.         }
  52.     }
  53. }
  54. close(TEST);
  55. close(INFO);
  56. #END
  57.  
Jul 27 '07 #1
12 3169
KevinADC
4,059 Recognized Expert Specialist
Maybe you should be checking string equality instead of numeric equality:

if ($dateTime eq "$dates$dates2" ) {



never quote scalars (unless absolutely necessary) like you did in this "if" condition:

if ("$dateTime" == $dates . " $dates2") {


only quote variables like I did above when you are constructing a new string. Quoting can hide errors that make debugging a script near impossible, even if you are using "my" and "warnings". Plus it slows down your script because each double-quoted scalar makes a new copy of the scalar that never gets used if you do not assign it to a new scalar or use it in an operation like I did above to compare the two strings. It is a bad habit you should try and rid yourself of earlier instead of later.
Jul 27 '07 #2
miller
1,089 Recognized Expert Top Contributor
Instead of parsing an external process, why not just stick with a pure perl solution?

perldoc stat
perldoc -X

The following script prints any file that is been modified today in the specified directory. This could easily be modified to serve your purposes.

Expand|Select|Wrap|Line Numbers
  1. use POSIX qw(strftime);
  2.  
  3. use strict;
  4.  
  5. my $today = strftime "%Y%m%d", localtime;
  6.  
  7. my $dir = "/home/tibco/tibco/ACS_MQ_ADAPTER/logs";
  8.  
  9. opendir(DIR, $dir) or die "Can't open $dir: $!";
  10. while (my $file = readdir(DIR)) {
  11.     next if $file =~ /^\.+$/;
  12.  
  13.     my $path = "$dir/$file";
  14.     my $modified = (stat($path))[9];
  15.     my $date = strftime "%Y%m%d", localtime($modified);
  16.  
  17.     print "$file modified today\n" if $date eq $today;
  18. }
  19. closedir(DIR);
  20.  
- Miller
Jul 27 '07 #3
KevinADC
4,059 Recognized Expert Specialist
this also looks wrong:

$_ = split;


assigning the entire return value of split to a scalar should return the number of splits. You need to assign the return value to a list or array:

@data = split;

and are you sure you want to just use "split" with no arguments?
Jul 27 '07 #4
jonathan184
154 New Member
Thanks guys the scripts you gave are really good in a pure perl solution i am still a novice thats why i went this way.

hey guys i made a big mistake, the if statements were fine,
I forgot to declare a variable for dateTime for the perl time section

I only devlared it for hard coding the values. Well it works well withthe hard coded values but how do I put this in variable, i think that is my issue now

this is what i did

I am guess to manipulate the array?

Expand|Select|Wrap|Line Numbers
  1. How would i put this in a variable?
  2.  
  3.  @datepcs = split(/\s+/, scalar localtime);
  4.     printf("%s %s", @datepcs[1,2]);
Jul 27 '07 #5
jonathan184
154 New Member
oh so i guess it would of bee @row = split;
yes i read split; parses by spaces by default.

this also looks wrong:

$_ = split;


assigning the entire return value of split to a scalar should return the number of splits. You need to assign the return value to a list or array:

@data = split;

and are you sure you want to just use "split" with no arguments?
Jul 27 '07 #6
jonathan184
154 New Member
Hey guys I got everything working. Thanks so much for your help.
I guess i learned to do some more troubleshooting and Miller thanks for the script, it is very interesting in my learning of perl. I learned alot from all of you guys on the forum and thanks for helping me once again I appreciate it.
Jul 27 '07 #7
miller
1,089 Recognized Expert Top Contributor
Your welcome. Glad you were able to get your script to work.

Btw, the best way you could improve this script or any perl script would be to add a "use strict;" statement to the top.

- Miller
Jul 27 '07 #8
numberwhun
3,509 Recognized Expert Moderator Specialist
And allow me to add "use warnings;" as well. :-)

Jeff
Jul 27 '07 #9
miller
1,089 Recognized Expert Top Contributor
I've started using warnings more often. However, I typically consider most of things that it "warns" about as rather superfluous.

The biggest problem that I have with it though is that it provides runtime warnings instead of compile time like "use strict;". This means that I leave "use warnings;" out of any production level code as I do not want to cause the end-user needless worry for something that doesn't matter.

"use strict:" however should be included in any piece of code.

- Miller
Jul 27 '07 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

2
2975
by: Daniel Fisher | last post by:
Hi All! I'm fairly new to PhP and basicly trying to learn right now. Now I have a problem - I have a fairly large collection of movies which people keep borrowing from me. And then not returning. So I've put together an Access database with three tables - my media library, a list of friends and email addresses, and a borrow table which uses foreign keys from the other two tables to see who has borrowed what. Borrow Table also has two...
6
10899
by: bissatch | last post by:
Hi, I am about to write an application that will display all pdf files in a folder and display them by file name in order of date. Is there an easy way of doing this? I was thinking about somehow adding filename and date created in an array, sorting by date and then printing onto an html page with a link to that file. How would I do this though? Is this the simplest method or is there a better way of doin this?
0
1561
by: Tim Brooks | last post by:
All, I'm hoping one of you Xml or Data gurus can offer an opinion. I'm working on an app to basically compare two semi-structured data files (e.g. Excel / CSV) to one another. But I need to compare them as if they were datatables... (ie a simple diff type tool won't work)... More specifically, the process I envision so far is: 1) Read in two files -- if Excel select appropriate sheet (would also require users to structure their...
6
8492
by: MarkAurit | last post by:
Im having difficulty coming up with a good algorithm to express the following comparison: "if <a given date> falls between the (current date - 5 days) and the (current date)" Obviously. DateTime.Now and something like (AddDays(DateTime.Now,-5) are used for the inner and outer ranges, its how to express the "between" that has me. /* what Id like to do, in pseudo code */ dateToTest=DateTime.Parse("mm/dd/yy");
8
1378
by: JFB | last post by:
Hi All, I'm trying to find if a file name that includes the date is before todays to do some procedures. In my IF statement is working is just a few dates before but not is a year before. How can I fix this? Tks in advance... This is what I have: 'Set today's date
4
3761
by: blini | last post by:
Helo.... How I can convert string "26/03/2006 15:51" for a date? I need to convert and to compare if "09/06/2006 14:20" is lesser or equal that the current date. Everything in Javascript.
7
3894
by: Brett_A | last post by:
I have the following code: If ad_expiration_date (date() + 90) then ad_expiration_date = (date() + 90) else end if What I want to happen is if the ad_expiration_date entered by the user is beyond 90 days from today's date, the Expiration Date should be today's date plus 90 days. If the entered date is less than 90 days
1
6320
by: Lars B | last post by:
Hey guys, I have written a C++ program that passes data from a file to an FPGA board and back again using software and DMA buffers. In my program I need to compare the size of a given file against a software buffer of size 3MB. This is needed so as to see which function to use to read from the file. As the files used range from very large (>30GB) to very small (<3MB), I have enabled large file support and I obtain the file size by using the...
16
4461
by: W. eWatson | last post by:
Are there some date and time comparison functions that would compare, say, Is 10/05/05 later than 09/22/02? (or 02/09/22 format, yy/mm/dd) Is 02/11/07 the same as 02/11/07? Is 14:05:18 after 22:02:51? (24 hour day is fine) How about the date after 02/28/04 is 02/29/04, or the date after 09/30/08 is 10/01/08?
0
9521
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
10107
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
9945
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9900
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9765
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8768
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
6599
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5361
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
3
3442
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.