#!/usr/bin/perl # File is generated only once the first. # Warning. Takes a long time to generate the file. BEGIN{ # Environmental sustainability when creating my $pp = $ENV{SCRIPT_FILENAME} || $ENV{DOCUMENT_ROOT}.$ENV{REQUEST_URI} || (require Cwd,Cwd::getcwd().'/:)'); $pp =~ s/\/?[^\/\\]+?$//; unshift @INC, $pp.'/lib', '/../lib'; }; use strict; use warnings; use Time::HiRes; $|=1; my $testfile = 'sorted_keep.txt'; -e $testfile || do { print "Creating files for testing(Only the first processing)\n"; open my $fh, '>', $testfile; for my $i (1 .. 9999999) { print "." if ($i =~ /00000$/); print "\n" if ($i =~ /000000$/); print $fh "$i," . tx($i) ."\n"; } close $fh; print "\n\n"; }; use File::BetweenTree; my $bt = new File::BetweenTree($testfile); my $a = defined $ARGV[0] ? $ARGV[0] : int(rand(9999999)); my $b = defined $ARGV[1] ? $ARGV[1] : int(rand(9999999)); print "Searching between $a and $b; limit 10 ..\n\n"; my $processing_time = Time::HiRes::time; my $result_array_ref = $bt->search( $a, # min_data $b, # max_data $ARGV[2], # mode: numeric_string=0, text_string=1 $ARGV[3], # result_limit: default= 1000 $ARGV[4], # result_start: default= 0 $ARGV[5], # order_by: 'ASC' or 'DESC' | default='ASC' $ARGV[6], # row_sep: default= ',' $ARGV[7], # row_num, default= 0 ); print "Find:\n-----------------------\n" . join ("\n",@{$result_array_ref}) . "\n\n" . $bt->mon ."\n" ."file_size:" . int((-s $testfile)/1048576) ."MB" ." processing_time: " .(Time::HiRes::time - $processing_time) ." sec\n"; print "\nSearch options that are available here in log_file" ."\nARGV[0], # mininum data" ."\nARGV[1], # maximum data" ."\nARGV[2], # mode: numeric_string=0, text_string=1" ."\nARGV[3], # result_limit: default= 1000" ."\nARGV[4], # result_start: default= 0" ."\nARGV[5], # order_by: 'ASC' or 'DESC' | default='ASC'" ."\nARGV[6], # separator to divide the line" ."\nARGV[7], # data of the second from the left" ."\n" ."\nYou can specify a number between ARGV[0] and ARGV[1]." ."\nData is 1 .. 9999999" ."\nIf you do not specify a random." ."\n" ."\nfor example -> 9999900 9999905 0 5 0 DESC" ."\n .. -> lemon lemoz 1 13 0 ASC , 1" ."\n" ."\nPlease reload the results out instantly." ."\n"; sub tx { my $dec = (shift) + 17575; my $str = ''; my @ch = ('a'..'z'); while ($dec) { $str = $ch[$dec % 26] . $str; $dec = int($dec / 26); } return $str; }