搜索和替换文件或目录的一个好类--很实用
2023-06-13 09:13:44 时间
这是个非常有用的程序,可以对文本文件进行特定的搜索,并以特定的文字替换指定的文字,举个例子说如果我这篇文章里有一个字全部打错了,有几十处,要一一找出来修改是件很麻烦的事,用下面这个就可以轻松搞定。--teaman.oso.com.cn
类文件search_replace.inc
<?php
classsearch_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;
//以下进行函数定义和设置
functionsearch_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 ="";
}
/***************************************
**Accessorforretrievingoccurences.
***************************************/
functionget_num_occurences(){
return$this->occurences;
}
//获取最后的错误
functionget_last_error(){
return$this->last_error;
}
//设置FIND变量
functionset_find($find){
$this->find=$find;
}
//设置replace变量
functionset_replace($replace){
$this->replace=$replace;
}
//设置FILE变量
functionset_files($files){
$this->files=$files;
}
//设置目录变量
functionset_directories($directories){
$this->directories=$directories;
}
//设置目录变量set_include_subdir
functionset_include_subdir($include_subdir){
$this->include_subdir=$include_subdir;
}
//设置ignore_lines变量
functionset_ignore_lines($ignore_lines){
$this->ignore_lines=$ignore_lines;
}
//确定是哪一种搜索方式
functionset_search_function($search_function){
switch($search_function){
case"normal":$this->search_function="search";
returnTRUE;
break;
case"quick":$this->search_function="quick_search";
returnTRUE;
break;
case"preg" :$this->search_function="preg_search";
returnTRUE;
break;
case"ereg" :$this->search_function="ereg_search";
returnTRUE;
break;
default :$this->last_error ="Invalidsearchfunctionspecified";
returnFALSE;
break;
}
}
//以下为搜索和替换程序的主文件
functionsearch($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功能
functionquick_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
functionpreg_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
functionereg_search($filename){
clearstatcache();
$file=fread($fp=fopen($filename,"r"),filesize($filename));fclose($fp);
$occurences=count($matches=split($this->find,$file))-1;
$file =ereg_replace($this->find,$this->replace,$file);
if($occurences>0)$return=array($occurences,$file);else$return=FALSE;
return$return;
}
//写新文件
functionwriteout($filename,$contents){
if($fp=@fopen($filename,"w")){
fwrite($fp,$contents);
fclose($fp);
}else{
$this->last_error="Couldnotopenfile:".$filename;
}
}
//由do_search调用,排出所有要搜索的文件
functiondo_files($ser_func){
if(!is_array($this->files))$this->files=explode(",",$this->files);
for($i=0;$i<count($this->files);$i++){
if($this->files[$i]=="."OR$this->files[$i]=="..")continue;
if(is_dir($this->files[$i])==TRUE)continue;
$newfile=$this->$ser_func($this->files[$i]);
if(is_array($newfile)==TRUE){
$this->writeout($this->files[$i],$newfile[1]);
$this->occurences+=$newfile[0];
}
}
}
//由do_search()调用,排出所有要搜索的目录
functiondo_directories($ser_func){
if(!is_array($this->directories))$this->directories=explode(",",$this->directories);
for($i=0;$i<count($this->directories);$i++){
$dh=opendir($this->directories[$i]);
while($file=readdir($dh)){
if($file=="."OR$file=="..")continue;
if(is_dir($this->directories[$i].$file)==TRUE){
if($this->include_subdir==1){
$this->directories[]=$this->directories[$i].$file."/";
continue;
}else{
continue;
}
}
$newfile=$this->$ser_func($this->directories[$i].$file);
if(is_array($newfile)==TRUE){
$this->writeout($this->directories[$i].$file,$newfile[1]);
$this->occurences+=$newfile[0];
}
}
}
}
//调用这个do_search()就可以开始对文件或目录进行搜索
functiondo_search(){
if($this->find!=""){
if((is_array($this->files)ANDcount($this->files)>0)OR$this->files!="")$this->do_files($this->search_function);
if($this->directories!="") $this->do_directories($this->search_function);
}
}
}//Endofclass
?>
//下面是调用该类的例子说明,请存为example.php
<?php
include("search_replace.inc"); //将文件包括进来
//建立新物件,设置搜索条件、最后返回搜索结果
$sr=newsearch_replace("asp","php",array("test.txt"));//调用搜索与替换
$sr->set_search_function("quick"); //设置搜索条件
$sr->do_search();
$sr->set_find("another");
$sr->do_search();
//下面是定制的返回信息
header("Content-Type:text/plain");
echo"发现和替换以下几个地方:".$sr->get_num_occurences()."\r\n";
echo"啊,错误发生如下.............:".$sr->get_last_error()."\r\n";
?>
//将以下文字存为test.txt,注意text.txt必须是可读可写的
"我非常喜欢asp,它简单易学,功能强,听说asp已经占了大半市场,asp真好。"
此时,如果您打开exampe.php就会出现下面这些:
发现和替换以下几个地方:3
啊,错误发生如下..........:
查看test.txt文件,果然出现asp的地方被php替换了。
类文件search_replace.inc
<?php
classsearch_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;
//以下进行函数定义和设置
functionsearch_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 ="";
}
/***************************************
**Accessorforretrievingoccurences.
***************************************/
functionget_num_occurences(){
return$this->occurences;
}
//获取最后的错误
functionget_last_error(){
return$this->last_error;
}
//设置FIND变量
functionset_find($find){
$this->find=$find;
}
//设置replace变量
functionset_replace($replace){
$this->replace=$replace;
}
//设置FILE变量
functionset_files($files){
$this->files=$files;
}
//设置目录变量
functionset_directories($directories){
$this->directories=$directories;
}
//设置目录变量set_include_subdir
functionset_include_subdir($include_subdir){
$this->include_subdir=$include_subdir;
}
//设置ignore_lines变量
functionset_ignore_lines($ignore_lines){
$this->ignore_lines=$ignore_lines;
}
//确定是哪一种搜索方式
functionset_search_function($search_function){
switch($search_function){
case"normal":$this->search_function="search";
returnTRUE;
break;
case"quick":$this->search_function="quick_search";
returnTRUE;
break;
case"preg" :$this->search_function="preg_search";
returnTRUE;
break;
case"ereg" :$this->search_function="ereg_search";
returnTRUE;
break;
default :$this->last_error ="Invalidsearchfunctionspecified";
returnFALSE;
break;
}
}
//以下为搜索和替换程序的主文件
functionsearch($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功能
functionquick_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
functionpreg_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
functionereg_search($filename){
clearstatcache();
$file=fread($fp=fopen($filename,"r"),filesize($filename));fclose($fp);
$occurences=count($matches=split($this->find,$file))-1;
$file =ereg_replace($this->find,$this->replace,$file);
if($occurences>0)$return=array($occurences,$file);else$return=FALSE;
return$return;
}
//写新文件
functionwriteout($filename,$contents){
if($fp=@fopen($filename,"w")){
fwrite($fp,$contents);
fclose($fp);
}else{
$this->last_error="Couldnotopenfile:".$filename;
}
}
//由do_search调用,排出所有要搜索的文件
functiondo_files($ser_func){
if(!is_array($this->files))$this->files=explode(",",$this->files);
for($i=0;$i<count($this->files);$i++){
if($this->files[$i]=="."OR$this->files[$i]=="..")continue;
if(is_dir($this->files[$i])==TRUE)continue;
$newfile=$this->$ser_func($this->files[$i]);
if(is_array($newfile)==TRUE){
$this->writeout($this->files[$i],$newfile[1]);
$this->occurences+=$newfile[0];
}
}
}
//由do_search()调用,排出所有要搜索的目录
functiondo_directories($ser_func){
if(!is_array($this->directories))$this->directories=explode(",",$this->directories);
for($i=0;$i<count($this->directories);$i++){
$dh=opendir($this->directories[$i]);
while($file=readdir($dh)){
if($file=="."OR$file=="..")continue;
if(is_dir($this->directories[$i].$file)==TRUE){
if($this->include_subdir==1){
$this->directories[]=$this->directories[$i].$file."/";
continue;
}else{
continue;
}
}
$newfile=$this->$ser_func($this->directories[$i].$file);
if(is_array($newfile)==TRUE){
$this->writeout($this->directories[$i].$file,$newfile[1]);
$this->occurences+=$newfile[0];
}
}
}
}
//调用这个do_search()就可以开始对文件或目录进行搜索
functiondo_search(){
if($this->find!=""){
if((is_array($this->files)ANDcount($this->files)>0)OR$this->files!="")$this->do_files($this->search_function);
if($this->directories!="") $this->do_directories($this->search_function);
}
}
}//Endofclass
?>
//下面是调用该类的例子说明,请存为example.php
<?php
include("search_replace.inc"); //将文件包括进来
//建立新物件,设置搜索条件、最后返回搜索结果
$sr=newsearch_replace("asp","php",array("test.txt"));//调用搜索与替换
$sr->set_search_function("quick"); //设置搜索条件
$sr->do_search();
$sr->set_find("another");
$sr->do_search();
//下面是定制的返回信息
header("Content-Type:text/plain");
echo"发现和替换以下几个地方:".$sr->get_num_occurences()."\r\n";
echo"啊,错误发生如下.............:".$sr->get_last_error()."\r\n";
?>
//将以下文字存为test.txt,注意text.txt必须是可读可写的
"我非常喜欢asp,它简单易学,功能强,听说asp已经占了大半市场,asp真好。"
此时,如果您打开exampe.php就会出现下面这些:
发现和替换以下几个地方:3
啊,错误发生如下..........:
查看test.txt文件,果然出现asp的地方被php替换了。
相关文章
- vscode怎样新建项目和文件
- yuicompressor java_使用yuicompressor-2.4.8.jar压缩js文件报错了(jdk1.8.0_25)「建议收藏」
- Java文件读写
- linux(1)Mac上传文件到Linux服务器
- Mac教程:Spotlight和访达搜索不到文件的解决办法
- 【生信教程】如何搜索高速下载一篇CancerCell文章中测序原始文件,B站有视频教程哦~
- Mac端简单好用的文件搜索工具,Find Any File
- Find Any File for Mac(文件搜索)
- Linux组管理:文件的归宿(linux文件所属的组)
- LINUX 使用Grep搜索文件内容(linux中grep)
- Linux下运行exe文件的简易方法(linux运行exe文件)
- 快速搜索你的Linux文件(搜索文件linux)
- 者Linux Grep下的利用利用Linux Grep加快文件搜索速度(linuxgrep或)
- Linux下搜索文件的技巧(在linux查找文件)
- 使用grep在Linux中搜索文件(linuxgrepe)
- 文件Linux管理Hosts文件介绍(linuxhosts)
- 使用Linux中的Grep命令实现文件搜索(grep使用linux)
- 如何在Linux下创建二进制文件(linux创建二进制文件)
- 掌握Linux搜索文件指令,让找文件不再是难题!(linux搜索文件指令)
- Linux平台如何高效搜索PHP文件(linux搜索php)
- Linux下快速搜寻文件内容的技巧(linux 文件内容搜索)
- Linux 文件夹搜索:快速找到所需文件(linux 文件夹搜索)
- 基础:在 Linux 终端中移动文件
- 如何使用FSO搜索硬盘文件
- 硬盘文件搜索代码(ASP类)