Method: _databug_thresh_file($fpath, $ratio_denominator=3)
I'm trying to make the class workable without a database because I'm lazy and find integrating them in my PHP scripts a bit of a nuisance and, well, I just find it tidier not to get MySQL involved sometimes.
There are a couple methods in the class for opening files and pulling data into an array. Most involve some randomization of the result. So I wrote this method to lighten the load. The
There are a couple methods in the class for opening files and pulling data into an array. Most involve some randomization of the result. So I wrote this method to lighten the load. The
$ratio_denominator
argument indicates the ratio of lines (as in 1 in every $ratio_denominator
lines) that will be pulled into the array (i.e. the "threshing"). The same concept is used with set_zip_data_randomly_by_range
function. /**
* @access private
* @return array
*/
function _databug_thresh_file($fpath, $ratio_denominator=3)
{
// *** DATA
# internal
$skip_token = '%';
$_d = $ratio_denominator;
$_i = 0;
# return
$LINES = array();
// *** MANIPULATE
# sanity check
if ( !is_file($source_path) )
{
trigger_error("file [$source_path] not found", E_USER_WARNING);
return 0;
}
# open file (for reading)
$_handle = @fopen($source_path, "r");
# Set Mod Offset
$_mod_offset = mt_rand(0, $_d-1);
# fetch file lines
while ( !feof($_handle) )
{
$_i++;
if ( $_i % $_d <> $_mod_offset )
{
continue;
}
$_buffer = fgets($_handle, 4096);
$_line = trim($_buffer);
# check for skip token
if ( substr($_line,0,1) <> $skip_token && !empty($_line) )
{
$LINES[] = $_line;
}
}
# close file
fclose($_handle);
# DEBUG
#print_r($LINES);
# catch
if ( !count($LINES) )
{
trigger_error('no lines found', E_USER_WARNING);
}
elseif ( count($LINES) == 1 )
{
trigger_error('only 1 line fetched -> check EOL delimiter', E_USER_NOTICE);
}
// *** RETURN
return $LINES;
}
* @access private
* @return array
*/
function _databug_thresh_file($fpath, $ratio_denominator=3)
{
// *** DATA
# internal
$skip_token = '%';
$_d = $ratio_denominator;
$_i = 0;
# return
$LINES = array();
// *** MANIPULATE
# sanity check
if ( !is_file($source_path) )
{
trigger_error("file [$source_path] not found", E_USER_WARNING);
return 0;
}
# open file (for reading)
$_handle = @fopen($source_path, "r");
# Set Mod Offset
$_mod_offset = mt_rand(0, $_d-1);
# fetch file lines
while ( !feof($_handle) )
{
$_i++;
if ( $_i % $_d <> $_mod_offset )
{
continue;
}
$_buffer = fgets($_handle, 4096);
$_line = trim($_buffer);
# check for skip token
if ( substr($_line,0,1) <> $skip_token && !empty($_line) )
{
$LINES[] = $_line;
}
}
# close file
fclose($_handle);
# DEBUG
#print_r($LINES);
# catch
if ( !count($LINES) )
{
trigger_error('no lines found', E_USER_WARNING);
}
elseif ( count($LINES) == 1 )
{
trigger_error('only 1 line fetched -> check EOL delimiter', E_USER_NOTICE);
}
// *** RETURN
return $LINES;
}
0 Comments:
Post a Comment
<< Home