text.class.php.php文本操作类

来源:互联网 发布:淘宝快递拒收退款流程 编辑:程序博客网 时间:2024/05/18 02:40
<?phpclass 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 cxfunction 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;}}

原创粉丝点击