in reply to Re: Comparing Dates and Reoccurance
in thread Comparing Dates and Reoccurance

Hi Netwallah,

I added to your code with the following when i run the code, it does not however, produce the desired output.

#!/usr/local/bin/perl -w use strict; use warnings; use Time::Local; my $infile = 'input.2008-01-01.log'; my $outfile = 'output.2008-01-01.log'; my($fh_out, $fh); open($fh_out, '>', $outfile) or die "Could not open outfile: $!"; open($fh, '<', $infile) or die "Could not open logfile: $!"; my %track; while (<$fh>){ my ($date,$ignoreIDLiteral,$id) = split / - | = /; chomp $id; my $time = dateconv($date); my $prevtime = $track{$id}{TIME}; $track{$id}{TIME}=$time; $track{$id}{DATE}=$date; $track{$id}{COUNT}++; print "$id\t$date\t$track{$id}{COUNT}\n" if $prevtime and $time - $prevtime > 3600; } sub dateconv{ my $d = shift; my %month = qw[jan 1 feb 2 mar 3 apr 4 may 5 jun 6 jul 7 aug 8 sep 9 oct 10 nov 11 dec 12]; my @p = $d=~/(\d+)-(\w+)-(\d+)\s(\d+):(\d+):(\d+)/; $p[1]=$month{ lc $p[1] } - 1; return timelocal(@p[5,4,3,2,1,0]); #timelocal($sec,$min,$hour,$mday,$mon,$year); } close $fh_out; close $fh;

Replies are listed 'Best First'.
Re^3: Comparing Dates and Reoccurance
by NetWallah (Canon) on Mar 12, 2008 at 15:46 UTC
    You are opening and closing $fh_out, but you are not WRITING to it.

    Do you see anything on STDOUT ?

    If the file format is as you said in the initial post, this has been tested and it works. However, it is fragile, and even the slightest difference in format will throw it off.

    I would suggest learning how to debug the program, stepping through each statement, and checking the values.

         "As you get older three things happen. The first is your memory goes, and I can't remember the other two... " - Sir Norman Wisdom