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

$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

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

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值