PHP文本操作类

2018-09-07 13:00

阅读:354

  复制代码 代码如下:<?php
classCtbClass{

var$file;
var$index;

//建立一个文件并写入输入
functionnull_write($new)
{
$f=fopen($this->file,w);
flock($f,LOCK_EX);
fputs($f,$new);
fclose($f);
}
//添加数据记录到文件末端
functionadd_write($new){
$f=fopen($this->file,a);
flock($f,LOCK_EX);
fputs($f,$new);
fclose($f);
}
//配合readfile()的返回一起使用,把一行数据转换为一维数组
functionmake_array($line){
$array=explode(\x0E,$line);
return$array;
}

//把为一维数组转换一行数据
functionjoin_array($line){
$array=join(\x0E,$line);
return$array;
}
//返回数据文件的总行数
functiongetlines(){
$f=file($this->file);
returncount($f);
}
//返回下一行的数据记录(备用)
functionnext_line(){
$this->index=$this->index++;
return$this->get();
}

//返回上一行的数据记录(备用)
functionprev_line(){
$this->index=$this->index--;
return$this->get();
}
//返回当前行的数据记录数据较小
functionget(){
$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;
}
//返回当前行的数据记录数据较大
functionget_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;
}
//打开数据文件---以一维数组返回文件内容
functionread_file(){
if(file_exists($this->file)){
$line=file($this->file);
}
return$line;
}
//打开数据文件---以二维数组返回文件内容
functionopenFile(){
if(file_exists($this->file)){
$f=file($this->file);
$lines=array();
foreach($fas$rawline){
$tmpline=explode(\x0E,$rawline);
array_push($lines,$tmpline);
}
}
return$lines;
}
//传入一个数组,合并成一行数据,重写整个文件
functionoverwrite($array){
$newline=implode(\x0E,$array);
$f=fopen($this->file,w);
flock($f,LOCK_EX);
fputs($f,$newline);
fclose($f);
}

//添加一行数据记录到文件末端
functionadd_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);
}

//插入一行数据记录到文件最前面
functioninsert_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);
}

//更新所有符合条件的数据记录,适用于每行字节数据较大的情况
functionupdate($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);
}

//更新所有符合条件的数据记录,适用于每行字节数据较小的情况
functionupdate2($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);
}

//删除所有符合条件的数据记录,适用于每行字节数据较大的情况
functiondelete($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);
}

//删除所有符合条件的数据记录,适用于每行字节数据较小的情况
functiondelete2($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);
}

//取得一个文件里某个字段的最大值
functionget_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进行查询,以二维数组返回所有符合条件的数据
functionselect($column,$query_string){
$tline=$this->openfile();
$lines=array();
foreach($tlineas$line){
if($line[$column]==$query_string){
array_push($lines,$line);
}
}

return$lines;
}

//功能与functionselect()一样,速度可能略有提升
functionselect2($column,$query_string){
if(file_exists($this->file)){
$tline=$this->read_file();
foreach($tlineas$tmpLine){
$line=$this->make_array($tmpLine);
if($line[$column]==$query_string){
$lines[]=$tmpLine;
}
}
}

return$lines;
}

//根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据
functionselect_line($column,$query_string){
$tline=$this->read_file();
foreach($tlineas$tmpLine){
$line=$this->make_array($tmpLine);
if($line[$column]==$query_string){
return$line;
break;
}
}
}
//selectnext/prevline(next_prev==>1/next,2/prev)bycx
functionselect_next_prev_line($column,$query_string,$next_prev){
$tline=$this->read_file();
$line_key_end=count($tline)-1;
$line_key=-1;
foreach($tlineas$tmpLine){
$line_key++;
$line=$this->make_array($tmpLine);
if($next_prev==1){//next?
if($line[$column]==$query_string){
if($line_key==0){
return0;
}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){
return0;
}else{
$line_key_down=$line_key+1;
break;
}
}
}else{
return0;
}
}
$down_line=$this->make_array($tline[$line_key_down]);
return$down_line;
}


}
?>


评论


亲,登录后才可以留言!