关于我们┊AboutMe

昵称:Hopol(■童■)

联系:QQ:18883

邮箱:info(at)18883.com

主页:www.18883.com

手机浏览 日志归档 RSS 2.0 订阅
Register | Login

PHP文本操作类

<?php
class CtbClass {     
    
                 var     
$file;             
                 var     
$index;         
    
         
//建立一个文件并写入输入     
                 
function     null_write($new)     
                 {     
                                 
$f=fopen($this->file,"w");             
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$new);             
                                 
fclose($f);     
                 }     
                 
//     添加数据记录到文件末端     
                 
function     add_write($new)     {                 
                                 
$f=fopen($this->file,"a");             
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$new);                 
                                 
fclose($f);     
                 }     
                 
//     配合readfile()的返回一起使用,把一行数据转换为一维数组     
                 
function     make_array($line)     {     
                                 
$array     =     explode("\x0E",$line);     
                                 return     
$array;     
                 }     
                 
                 
//把为一维数组转换一行数据     
                 
function     join_array($line)     {     
                                 
$array     =     join("\x0E",$line);     
                                 return     
$array;     
                 }     
                 
//     返回数据文件的总行数     
                 
function     getlines()     {     
                                 
$f=file($this->file);             
                                 return     
count($f);             
                 }     
                 
//     返回下一行的数据记录(备用)     
                 
function     next_line()     {     
                                 
$this->index=$this->index++;             
                                 return     
$this->get();             
                 }     
    
                 
//     返回上一行的数据记录(备用)     
                 
function     prev_line()     {     
                                 
$this->index=$this->index--;             
                                 return     
$this->get();             
                 }         
                 
//     返回当前行的数据记录数据较小     
                 
function     get()     {     
                                 
$f=fopen($this->file,"r");             
                                 
flock($f,LOCK_SH);     
                                 for(
$i=0;$i<=$this->index;$i++)     {     
                                                 
$rec=fgets($f,1024);             
                                 }     
                                 
$line=explode("\x0E",$rec);     
                                 
fclose($f);     
                                 return     
$line;             
                 }         
                 
//     返回当前行的数据记录数据较大     
                 
function     get_big_file()     {     
                                 
$f=fopen($this->file,"r");             
                                 
flock($f,LOCK_SH);     
                                 for(
$i=0;$i<=$this->index;$i++)     {     
                                                 
$rec=fgets($f,1024*5);             
                                 }     
                                 
$line=explode("\x0E",$rec);     
                                 
fclose($f);     
                                 return     
$line;             
                 }         
                 
//     打开数据文件---以一维数组返回文件内容     
                 
function     read_file()     {     
                                 if     (
file_exists($this->file))     {     
                                                 
$line     =file($this->file);     
                                 }     
                                 return     
$line;     
                 }     
                 
//     打开数据文件---以二维数组返回文件内容     
                 
function     openFile()     {     
                                 if     (
file_exists($this->file))     {     
                                                 
$f     =file($this->file);     
                                                 
$lines     =     array();     
                                                 foreach     (
$f     as     $rawline)     {     
                                                                 
$tmpline     =     explode("\x0E",$rawline);     
                                                                 
array_push($lines,     $tmpline);     
                                                 }     
                                 }     
                                 return     
$lines;     
                 }     
                 
//     传入一个数组,合并成一行数据,重写整个文件     
                 
function     overwrite($array){     
                                 
$newline     =     implode("\x0E",$array);                     
                                 
$f     =     fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newline);     
                                 
fclose($f);     
                 }     
         
                 
//     添加一行数据记录到文件末端     
                 
function     add_line($array,$check_n=1)     {         
                                 
$s=implode("\x0E",$array);             
                                 
$f=fopen($this->file,"a");             
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$s);             
                                 if     (
$check_n==1)     fputs($f,"\n");             
                                 
fclose($f);     
                 }             
    
                 
//     插入一行数据记录到文件最前面     
                 
function     insert_line($array)     {     
                                 
$newfile     =     implode("\x0E",$array);     
                                 
$f     =     fopen($this->file,"r");     
                                 
flock($f,LOCK_SH);     
                                 while     (
$line     =     fgets($f,1024))     {     
                                                 
$newfile     .=     $line;     
                                 }     
                                 
fclose($f);     
                                 
$f     =     fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newfile);     
                                 
fclose($f);     
                 }     
    
                 
//     更新所有符合条件的数据记录,适用于每行字节数据较大的情况     
                 
function     update($column,$query_string,$update_array)     {     
                                 
$update_string     =     implode("\x0E",$update_array);             
                                 
$newfile     =     "";                     
                                 
$fc=file($this->file);     
                                 
$f=fopen($this->file,"r");     
                                 
flock($f,LOCK_SH);     
                                 for     (
$i=0;$i<count($fc);$i++)     {     
                                                 
$list     =     explode("\x0E",$fc[$i]);     
                                                 if     (
$list[$column]     !=     $query_string)     {     
                                                                 
$newfile     =     $newfile.chop($fc[$i])."\n";     
                                                 }     else     {     
                                                                 
$newfile     =     $newfile.$update_string;     
                                                 }     
                                 }     
                                 
fclose($f);     
                                 
$f=fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newfile);     
                                 
fclose($f);     
                 }     
    
                 
//     更新所有符合条件的数据记录,适用于每行字节数据较小的情况     
                 
function     update2($column,$query_string,$update_array)     {     
                                 
$newline     =     implode("\x0E",$update_array);             
                                 
$newfile     =     "";     
                                 
$f     =     fopen($this->file,"r");     
                                 
flock($f,LOCK_SH);     
                                 while     (
$line     =     fgets($f,1024))     {     
                                                 
$tmpLine     =     explode("\x0E",$line);     
                                                 if     (
$tmpLine[$column]     ==     $query_string)     {     
                                                                 
$newfile     .=     $newline;     
                                                 }     else     {     
                                                                 
$newfile     .=     $line;     
                                                 }     
                                 }     
                                 
fclose($f);     
                                 
$f     =     fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newfile);     
                                 
fclose($f);     
                 }     
    
                 
//     删除所有符合条件的数据记录,适用于每行字节数据较大的情况     
                 
function     delete($column,$query_string)     {     
                                 
$newfile     =     "";                     
                                 
$fc=file($this->file);     
                                 
$f=fopen($this->file,"r");     
                                 
flock($f,LOCK_SH);     
                                 for     (
$i=0;$i<count($fc);$i++)     {     
                                                 
$list     =     explode("\x0E",$fc[$i]);     
                                                 if     (
$list[$column]     !=     $query_string)     {     
                                                                 
$newfile     =     $newfile.chop($fc[$i])."\n";     
                                                 }     
                                 }     
                                 
fclose($f);     
                                 
$f=fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newfile);     
                                 
fclose($f);     
                 }             
    
                 
//     删除所有符合条件的数据记录,适用于每行字节数据较小的情况     
                 
function     delete2($column,$query_string){         
                                 
$newfile     =     "";     
                                 
$f     =     fopen($this->file,"r");     
                                 
flock($f,LOCK_SH);     
                                 while     (
$line     =     fgets($f,1024))     {     
                                                 
$tmpLine     =     explode("\x0E",$line);     
                                                 if     (
$tmpLine[$column]     !=     $query_string)     {     
                                                                 
$newfile     .=     $line;     
                                                 }     
                                 }     
                                 
fclose($f);     
                                 
$f     =     fopen($this->file,"w");     
                                 
flock($f,LOCK_EX);     
                                 
fputs($f,$newfile);     
                                 
fclose($f);     
                 }     
    
         
//取得一个文件里某个字段的最大值     
                 
function     get_max_value($column)     {     
                                 
$tlines     =     file($this->file);     
                                 for     (
$i=0;$i<=count($tlines);$i++)     {     
                                                 
$line=explode("\x0E",$tlines[$i]);     
                                                 
$get_value[]=$line[$column];     
                                 }     
                     
$get_max_value     =     max($get_value);     
                                 return     
$get_max_value;     
                 }     
    
    
                 
//     根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据     
                 
function     select($column,     $query_string)     {     
                                 
$tline     =     $this->openfile();     
                                 
$lines     =     array();     
                                 foreach     (
$tline     as     $line)     {     
                                                 if     (
$line[$column]     ==     $query_string)     {     
                                                                 
array_push($lines,     $line);     
                                                 }     
                                 }     
    
                                 return     
$lines;     
                 }     
    
                 
//     功能与function     select()一样,速度可能略有提升     
                 
function     select2($column,     $query_string)     {     
                                 if     (
file_exists($this->file))     {     
                                                 
$tline     =     $this->read_file();     
                                                 foreach     (
$tline     as     $tmpLine)     {     
                                                                 
$line     =     $this->make_array($tmpLine);     
                                                                 if     (
$line[$column]     ==     $query_string)     {     
                                                                                 
$lines[]=$tmpLine;     
                                                                 }     
                                                 }     
                                 }     
    
                                 return     
$lines;     
                 }     
    
                 
//     根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据     
                 
function     select_line($column,     $query_string)     {     
                                 
$tline     =     $this->read_file();     
                                 foreach     (
$tline     as     $tmpLine)     {     
                                                 
$line     =     $this->make_array($tmpLine);     
                                                 if     (
$line[$column]     ==     $query_string)     {     
                                                     return     
$line;     
                                                                 break;     
                                                 }     
                                 }     
                 }     
                 
//     select     next/prev     line(next_prev     ==>     1/next,     2/prev)     by     cx     
                 
function     select_next_prev_line($column,     $query_string,     $next_prev)     {     
                                 
$tline     =     $this->read_file();     
                                 
$line_key_end     =     count($tline)     -     1;     
                                 
$line_key     =     -1;     
                                 foreach     (
$tline     as     $tmpLine)     {     
                                                 
$line_key++;     
                                                 
$line     =     $this->make_array($tmpLine);     
                                                 if     (
$next_prev     ==     1)     {     //     next?     
                                                                 
if     ($line[$column]     ==     $query_string)     {     
                                                                                 if     (
$line_key     ==     0)     {     
                                                                                                 return     
0;     
                                                                                 }     else     {     
                                                                                                 
$line_key_up     =     $line_key     -     1;     
                                                                                                 return     
$up_line;     
                                                                                 }     
                                                                 }     else     {     
                                                                                 
$up_line     =     $line;     
                                                                 }     
                                                 }     elseif     (
$next_prev     ==     2)     {     //     prev?     
                                                                 
if     ($line[$column]     ==     $query_string)     {     
                                                                                 if     (
$line_key     ==     $line_key_end)     {     
                                                                                                 return     
0;     
                                                                                 }     else     {     
                                                                                                 
$line_key_down     =     $line_key     +     1;     
                                                                                                 break;     
                                                                                 }     
                                                                 }     
                                                 }     else     {     
                                                                 return     
0