对文本文件操作很好的类

from CTB

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

  1<count($fc);$i++) !="$query_string)" $f="fopen($this-" $list='explode("\x0E",$fc[$i]);' $newfile="$newfile.$update_string;" ($list[$column]="" else="" fclose($f);="" if="" {="" }="">file,"w");   
  2flock($f,LOCK_EX);   
  3fputs($f,$newfile);   
  4fclose($f);   
  5}   
  6  
  7// 更新所有符合条件的数据记录,适用于每行字节数据较小的情况   
  8function update2($column,$query_string,$update_array) {   
  9$newline = implode("\x0E",$update_array);   
 10$newfile = "";   
 11$f = fopen($this-&gt;file,"r");   
 12flock($f,LOCK_SH);   
 13while ($line = fgets($f,1024)) {   
 14$tmpLine = explode("\x0E",$line);   
 15if ($tmpLine[$column] == $query_string) {   
 16$newfile .= $newline;   
 17} else {   
 18$newfile .= $line;   
 19}   
 20}   
 21fclose($f);   
 22$f = fopen($this-&gt;file,"w");   
 23flock($f,LOCK_EX);   
 24fputs($f,$newfile);   
 25fclose($f);   
 26}   
 27  
 28// 删除所有符合条件的数据记录,适用于每行字节数据较大的情况   
 29function delete($column,$query_string) {   
 30$newfile = "";   
 31$fc=file($this-&gt;file);   
 32$f=fopen($this-&gt;file,"r");   
 33flock($f,LOCK_SH);   
 34for ($i=0;$i<count($fc);$i++) !="$query_string)" $f="fopen($this-" $list='explode("\x0E",$fc[$i]);' $newfile='$newfile.chop($fc[$i])."\n";' ($list[$column]="" fclose($f);="" if="" {="" }="">file,"w");   
 35flock($f,LOCK_EX);   
 36fputs($f,$newfile);   
 37fclose($f);   
 38}   
 39  
 40// 删除所有符合条件的数据记录,适用于每行字节数据较小的情况   
 41function delete2($column,$query_string){   
 42$newfile = "";   
 43$f = fopen($this-&gt;file,"r");   
 44flock($f,LOCK_SH);   
 45while ($line = fgets($f,1024)) {   
 46$tmpLine = explode("\x0E",$line);   
 47if ($tmpLine[$column] != $query_string) {   
 48$newfile .= $line;   
 49}   
 50}   
 51fclose($f);   
 52$f = fopen($this-&gt;file,"w");   
 53flock($f,LOCK_EX);   
 54fputs($f,$newfile);   
 55fclose($f);   
 56}   
 57  
 58//取得一个文件里某个字段的最大值   
 59function get_max_value($column) {   
 60$tlines = file($this-&gt;file);   
 61for ($i=0;$i&lt;=count($tlines);$i++) {   
 62$line=explode("\x0E",$tlines[$i]);   
 63$get_value[]=$line[$column];   
 64}   
 65$get_max_value = max($get_value);   
 66return $get_max_value;   
 67}   
 68  
 69  
 70// 根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据   
 71function select($column, $query_string) {   
 72$tline = $this-&gt;openfile();   
 73$lines = array();   
 74foreach ($tline as $line) {   
 75if ($line[$column] == $query_string) {   
 76array_push($lines, $line);   
 77}   
 78}   
 79  
 80return $lines;   
 81}   
 82  
 83// 功能与function select()一样,速度可能略有提升   
 84function select2($column, $query_string) {   
 85if (file_exists($this-&gt;file)) {   
 86$tline = $this-&gt;read_file();   
 87foreach ($tline as $tmpLine) {   
 88$line = $this-&gt;make_array($tmpLine);   
 89if ($line[$column] == $query_string) {   
 90$lines[]=$tmpLine;   
 91}   
 92}   
 93}   
 94  
 95return $lines;   
 96}   
 97  
 98// 根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据   
 99function select_line($column, $query_string) {   
100$tline = $this-&gt;read_file();   
101foreach ($tline as $tmpLine) {   
102$line = $this-&gt;make_array($tmpLine);   
103if ($line[$column] == $query_string) {   
104return $line;   
105break;   
106}   
107}   
108}   
109// select next/prev line(next_prev ==&gt; 1/next, 2/prev) by cx   
110function select_next_prev_line($column, $query_string, $next_prev) {   
111$tline = $this-&gt;read_file();   
112$line_key_end = count($tline) - 1;   
113$line_key = -1;   
114foreach ($tline as $tmpLine) {   
115$line_key++;   
116$line = $this-&gt;make_array($tmpLine);   
117if ($next_prev == 1) { // next?   
118if ($line[$column] == $query_string) {   
119if ($line_key == 0) {   
120return 0;   
121} else {   
122$line_key_up = $line_key - 1;   
123return $up_line;   
124}   
125} else {   
126$up_line = $line;   
127}   
128} elseif ($next_prev == 2) { // prev?   
129if ($line[$column] == $query_string) {   
130if ($line_key == $line_key_end) {   
131return 0;   
132} else {   
133$line_key_down = $line_key + 1;   
134break;   
135}   
136}   
137} else {   
138return 0;   
139}   
140}   
141$down_line = $this-&gt;make_array($tline[$line_key_down]);   
142return $down_line;   
143}   
144  
145  
146  
147}</count($fc);$i++)></count($fc);$i++)>
Published At
Categories with Web编程
comments powered by Disqus