Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^6: Time matching YYYY-MM-DD HH:MM:SS.SSS

by PRyanRay (Novice)
on Jul 26, 2012 at 19:54 UTC ( [id://983924]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Time matching YYYY-MM-DD HH:MM:SS.SSS
in thread Time matching YYYY-MM-DD HH:MM:SS.SSS

That is exactly correct. The timestamps will eventually match up. Essentially, one of the files may be a subset of the other. Each line has data that may be different for the same times. I need to compare that data. That part of the code is done. So, yes, I can count on the timestamps matching up once I get rid of the first n lines of the earlier file. What is the easiest (prettiest I guess) way to do this? Thanks a lot.
  • Comment on Re^6: Time matching YYYY-MM-DD HH:MM:SS.SSS

Replies are listed 'Best First'.
Re^7: Time matching YYYY-MM-DD HH:MM:SS.SSS
by dave_the_m (Monsignor) on Jul 27, 2012 at 11:34 UTC
    You probably want something like the following (not heavily tested):
    use warnings; use strict; @ARGV == 2 or die; my @files = @ARGV; my $date_qr = qr{^(\d{4}/\d\d/\d\d \d\d:\d\d:\d\d\.\d{3}) }; my @dates; for my $i (0,1) { open my $fh, '<', $files[$i] or die "Can't open $files[$i]: $!\n"; while (<$fh>) { next if /Epoch/; chomp; m/$date_qr/ or die "$files[$i]:$.: invalid line: $_\n"; $dates[$i] = $1; last; } } print "earliest=@dates\n"; my $i = 0; if ($dates[0] ne $dates[1]) { my $earliest = $dates[0] lt $dates[1] ? 0 : 1; open my $fh, '<', $files[$earliest] or die "Can't open $files[$earliest]: $!\n"; while (<$fh>) { next if /Epoch/; chomp; m/$date_qr/ or die "files[$earliest]:$.: invalid line: $_\n"; last if $1 ge $dates[!$earliest]; $i++; } } print "there are $i earlier date entries\n";

    Dave.

      Wow that's great code except the definition of $date_qr = qr line... The extra space lost me an hour or two this morning. I'm not sure why that made a difference. There is a space after the .\d{3} in the input files. Any ideas? Works like a charm besides that!
        The regex I used works against the sample data you supplied. Perhaps your real data is different. Perhaps you have tabs rather than spaces (so use \s), or perhaps some lines don't have any text after the timestamp?

        Dave.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2024-04-18 19:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found