家园首页 Php4手册 我的相册 家园下载 个人文集 给我留言
我形我塑,网络相册,www.5x54.com 相册 相册 心情相册,少女相册 免费申请,我形我塑免费相册
 家园 个人文集   http://www.5x54.com
 


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;  
        }  
  
  
  
}
版权保护版权保护,请不要随意复制^%#$32215)98sa。^_^,请不要随意复制^%#$32215)98sa。^_^
本文来自CSDN博客版权保护,请不要随意复制^%#$32215)98sa。^_^,转载请标明出处:http://blog.csdn.net/whzhaha/archive/2004/08/02/58825.aspx

收藏此文章     打印  更新     编辑此文章    『关闭窗口』