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

File::SortedSeek

by RMGir (Prior)
on Apr 04, 2003 at 13:13 UTC ( [id://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,"<data.in") or die "Can't open data.in, 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);

Conclusion

tachyon rules!!! :)

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (3)
As of 2025-07-18 13:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.