安利一個自己搞的黑科技

Judge_Cheung發表於2019-07-23

某日 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 上去賣的,但最後還是覺得拿出來分享好了,順便提一句: 未經作者同意,請勿傳播此程式碼...(當然網址是可以分享噠~ )

求推薦,求收藏,求分享 ღ( ´・ᴗ・` )

相關文章