您的位置:首页 > 其它

搜索和替换文件或目录的一个好类--很实用

2008-05-01 04:26 106 查看
这是个非常有用的程序,可以对文本文件进行特定的搜索,并以特定的文字替换指定的文字,举个例子说如果我这篇文章里有一个字全部打错了,有几十处,要一一找出来修改是件很麻烦的事,用下面这个就可以轻松搞定。--teaman.oso.com.cn
类文件 search_replace.inc
<?php

class search_replace{

var $find;
var $replace;
var $files;
var $directories;
var $include_subdir;
var $ignore_lines;
var $ignore_sep;
var $occurences;
var $search_function;
var $last_error;

//以下进行函数定义和设置

function search_replace($find, $replace, $files, $directories = '', $include_subdir = 1, $ignore_lines = array()){

$this->find = $find;
$this->replace = $replace;
$this->files = $files;
$this->directories = $directories;
$this->include_subdir = $include_subdir;
$this->ignore_lines = $ignore_lines;

$this->occurences = 0;
$this->search_function = 'search';
$this->last_error = '';

}

/***************************************
** Accessor for retrieving occurences.
***************************************/
function get_num_occurences(){
return $this->occurences;
}

//获取最后的错误
function get_last_error(){
return $this->last_error;
}

//设置FIND变量
function set_find($find){
$this->find = $find;
}

//设置replace变量
function set_replace($replace){
$this->replace = $replace;
}

//设置FILE变量
function set_files($files){
$this->files = $files;
}

//设置目录变量
function set_directories($directories){
$this->directories = $directories;
}

//设置目录变量 set_include_subdir
function set_include_subdir($include_subdir){
$this->include_subdir = $include_subdir;
}

//设置ignore_lines变量
function set_ignore_lines($ignore_lines){
$this->ignore_lines = $ignore_lines;
}

//确定是哪一种搜索方式
function set_search_function($search_function){
switch($search_function){
case 'normal': $this->search_function = 'search';
return TRUE;
break;

case 'quick' : $this->search_function = 'quick_search';
return TRUE;
break;

case 'preg' : $this->search_function = 'preg_search';
return TRUE;
break;

case 'ereg' : $this->search_function = 'ereg_search';
return TRUE;
break;

default : $this->last_error = 'Invalid search function specified';
return FALSE;
break;
}
}

//以下为搜索和替换程序的主文件
function search($filename){

$occurences = 0;
$file_array = file($filename);

for($i=0; $i<count($file_array); $i++){
$continue_flag = 0;
if(count($this->ignore_lines) > 0){
for($j=0; $j<count($this->ignore_lines); $j++){
if(substr($file_array[$i],0,strlen($this->ignore_lines[$j])) == $this->ignore_lines[$j]) $continue_flag = 1;
}
}
if($continue_flag == 1) continue;
$occurences += count(explode($this->find, $file_array[$i])) - 1;
$file_array[$i] = str_replace($this->find, $this->replace, $file_array[$i]);
}
if($occurences > 0) $return = array($occurences, implode('', $file_array)); else $return = FALSE;
return $return;

}

//使用quick(快速)搜索方法时,没有igonre_lines功能
function quick_search($filename){

clearstatcache();

$file = fread($fp = fopen($filename, 'r'), filesize($filename)); fclose($fp);
$occurences = count(explode($this->find, $file)) - 1;
$file = str_replace($this->find, $this->replace, $file);

if($occurences > 0) $return = array($occurences, $file); else $return = FALSE;
return $return;

}

//preg搜索方法不支持ignore_lines
function preg_search($filename){

clearstatcache();

$file = fread($fp = fopen($filename, 'r'), filesize($filename)); fclose($fp);
$occurences = count($matches = preg_split($this->find, $file)) - 1;
$file = preg_replace($this->find, $this->replace, $file);

if($occurences > 0) $return = array($occurences, $file); else $return = FALSE;
return $return;

}

//ereg搜索方法也不支持ignore_lines
function ereg_search($filename){

clearstatcache();
共2页: 上一页 1 [2] 下一页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐