Andy's Blog » » PHP文本操作类

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
                                  
} 
                      
} 
                      
$down_line  =  $this->make_array($tline[$line_key_down])
                      
return  $down_line
          
} 
 
 
}
?>

Tags: PHP

本文地址: http://www.21andy.com/new/20060605/341.html