Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical


by RMGir (Prior)
on Apr 04, 2003 at 13:13 UTC ( #248049=modulereview: print w/replies, xml ) Need Help??

Item Description: Quick lookup of values in sorted text files

Review Synopsis:

Mandatory background story

I had an end-of-day job that was taking too much time, and it turns out that the problem was retrieving the closing time values from several textual log files, using a sequential scan.

I knew the answer was to do a binary search, but I was fairly certain someone else HAD to have run into this problem before, so I typed text file binary search in the Search box here, and got Binary Searches on Sorted Text Files.

runrig's reply in that thread pointed me to File::SortedSeek.

Module overview

File::SortedSeek implements binary searches through large sorted text files, using string, numeric, or timestamp keys.

It's ideal for finding a particular time in large logs, for instance.

The module was authored by Dr. James Freeman, better known around here as tachyon.

Usage example

The files I have to deal with use a non-standard integer timestamp. Each line looks like

{timestamp} {value} {value} {value} {value}

Using the module to find the right line couldn't be easier!

#!/usr/bin/perl -w use strict; use File::SortedSeek ':all'; my $targetTS=1234567789; # for instance open(FILE,"<") or die "Can't open, error $!"; # File::SortedSeek::numeric looks for a numeric key # It takes an optional sub ref argument to "massage" the # line from the file to extract the key. numeric(*FILE,$targetTS,sub {$_[0]=~/^\s*(\d+)/ or return 0; return $1 +}); # this will return the line that matches $targetTS, or the first line +> $line=<FILE>; close(FILE);


tachyon rules!!! :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: modulereview [id://248049]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2017-07-29 12:14 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (436 votes). Check out past polls.