2005-09-07

    对文本文件操作很好的类

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://sunswin.blogbus.com/logs/1417200.html

    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;  
               }  
     
     
     
    }

    收藏到:Del.icio.us




    Tag:web PHP
    引用地址:

    评论

  • :(

    你的页面字体太小了,

    还是暗白色的,

    眼神不好使,

    为了看上一眼,

    得仔细瞅,

    :(