Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

File::SortedSeek

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,"<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!!! :)

Comment on File::SortedSeek
Download Code

Back to Reviews

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2015-07-04 03:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (57 votes), past polls