某日 zjq 菜鸡闲来无事(好吧是出于某种目的,但也不好告诉你),就东拼西凑搞了一份代码
这份代码可以方便的对于一些文档进行搜索处理,并且有着良好的扩展性(好吧这句话的意思就是 zjq 只弄了个搜索功能)
其实类似的功能几乎每个文档软件里面都有,然而当文件数量越来越多的时候,光是打开他们就足够让文档编辑软件崩溃了...更别提批量查找了
于是咱自个儿想办法...
讲道理,咱搞 OI (秃头)界的咋能不会点能够便利生活的小操作呢...
然鹅咱还真的不会,于是就只能上网搜索各种操作的实现方法,比如说 获取一堆文件名,以及在这些文件中查找指定内容(虽说后面这个咱自己弄也弄得起来...不过网上的方法说不定效率高呢!虽说最后并没有发现效率上的区别...但咱还是照着网上的搞法来了...)
于是乎一份文档批量搜索指定内容的 code 就出炉了!
//by Judge
#include<bits/stdc++.h>
#include<io.h>
using namespace std;
vector<string> files; char str[30]; string s;
char filePath[999]="E:\\Test";
void getFiles(string path,vector<string>& files){
long nowFile=0; string p;
struct _finddata_t fileinfo;
if((nowFile=_findfirst(p.assign(path).append("\\*").c_str(),&fileinfo))!=-1){
do{
//如果是目录,向下迭代
if((fileinfo.attrib&_A_SUBDIR)){
if(strcmp(fileinfo.name,".")!=0&&strcmp(fileinfo.name,"..")!=0)
getFiles(p.assign(path).append("\\").append(fileinfo.name),files);
} else //否则加入列表
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}while(_findnext(nowFile,&fileinfo)==0);
_findclose(nowFile);
}
}
inline bool Find(char* s,string obj){
ifstream fi(s,ofstream::in); string buf;
if(fi.is_open()){
while(fi>>buf) if(buf.find(obj)!=-1) return 1;
fi.close();
} return 0;
}
int main(){
getFiles(filePath, files ); //获取该路径下的所有文件
int size = files.size();
// 有需要的可以直接输出所有带路径的文件名
// for (int i = 0;i < size;i++)
// cerr<<files[i].c_str()<<endl;
string object="Judge";
char str[999]; int cnt=0;
for(int i=0;i<size;++i){
strcpy(str,files[i].c_str());
if(Find(str,object))
cerr<<files[i].c_str()<<endl,++cnt;
}
if(cnt>0) cerr<<"Find "<<cnt<<" Result!"<<endl;
else cerr<<"Failed Find Any Thing!!!"<<endl;
return 0;
}
这样 尼 就可以用这份代码方便的去查找一堆 文档里面内容辣~ QWQ (并没有意识到自己暴露了什么的 zjq )
具体怎么实现咱就不说了, OIer 们虽说自己不一定能打的出来,但是学习(或者说理解?)代码什么的比起小白来说还是有着挺大的优势的吧...
但考虑到真正的小白对于这份代码可能并不能了解....QWQ
于是咱稍微讲讲用法(实现讲个鬼啊,里面一堆函数咱也不知道具体是个啥子的好伐?):
首先把第 六 行的那个 filePath 后面跟的字符串(对,就是 "E:\\Test" )改成你想要搜索的文件夹的路径(只要在文件夹上面的地址栏里复制一下就好了),这里稍微注意一下,反斜杠都是要两个的,因为...哎, OIer 自己能懂,别人咱说了也没啥用...反正一个反斜杠改成俩就好咯
其次就是把 main 函数里面的第 六 行的 object 后面跟的字符串(对,就是 "Judge" )改成你要搜索的内容(可以是中文,另外上面的路径里面也同样可以有中文)
最后是最重要的,如果您不是搞 C++ 的,得装个 dev cpp ... 这个,咱给个链接总行了吧...安装咱也不教了... 地址点这里
顺便提一个可喜的发现: 菜鸡 zjq 把存储汉字的两个 char 转 int 输出后惊奇的发现它们是负数,或许这就是字符存储汉字的方式...并且可以存大概 2 的 17 次种汉字,远远超过了汉字的总字数(当然明朝那些一个个都是造字巨佬的贵族搞出来的神仙字咱可不算进去哈,虽说算进去了应该也是放的下的 QWQ )
ojbk...原本这玩意儿咱想拿到 csdn 上去卖的,但最后还是觉得拿出来分享好了,顺便提一句: 未经作者同意,请勿传播此代码...(当然网址是可以分享哒~ )
求推荐,求收藏,求分享 ღ( ´・ᴗ・` )