<?php
class Text {
var $file;
var $index;
// 建立一个文件并写入输入
function null_write($new) {
$f = fopen ( $this->file, "w" );
flock ( $f, LOCK_EX );
fputs ( $f, $new );
fclose ( $f );
}
function read() {
return file_get_contents ( $this->file );
}
// 添加数据记录到文件末端
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;
}
}
text.class.php.php文本操作类
最新推荐文章于 2021-03-20 09:25:22 发布