文本文件操作的php類

cp5m 9年前發布 | 686 次閱讀 PHP

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

</pre>

 本文由用戶 cp5m 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!