ASP檢索網站指定目錄檔案的演算法與應用方向 (轉)

worldblog發表於2007-12-02
ASP檢索網站指定目錄檔案的演算法與應用方向 (轉)[@more@]

 

 

 在我們許多網站中存在這樣一個問題,就是連結的維護,這是一項工作量很大的工作,若不是的專門工作人員進行維護的大型網站,普通站點的站點更新維護工作基本上都成了一個很令人頭疼的問題,特別是在沒有很多人手的情況下,要經常維護更新連結更是討厭,因為這項工作沒有多少創意,卻很耗時,而JACK顯然不是那種喜歡花費大量時間在一件沒創意的事情上的那種人,與是,JACK想出了一個的原型,讓它來完成我們所討厭的工作吧!
 現在我們假設你有這樣一項網站維護任務,就是要把每個月的經濟評論分門別類地連結起來供大家檢視,這些評論涉及了經濟執行的各個方面,可能有國內生產總值的,有物價指數的,有工業發展情況的,並且它們有一個共同的特徵,就是他們的名就代表了各自評論的內容,例:《XX市1999年國內生產總值完成情況分析》,在這麼多合適的假設下(嘻,假設幾乎多過了薩繆爾森的經濟學了!),我們偷賴的機會來了!我們只要把這些檔案拷入評論這個目錄相應的子目錄,然後寫一個ASP頁面,它所完成的功能就是檢索指定目錄下面的檔案,並檢索結果做成可供點選的連結,那麼我們應該怎麼寫呢?
 很簡單,我們只要讓ASP給出指定目錄下的檔名集合,並遍歷這個集合,把集合的每個元素做成相應的連結供大家選擇就行啦!另外,若要在全部經濟類別內查詢所有含有某特徵字串的檔名的檔案呢?小CASE啦!你只要把檢索檔案的放入到一個遞迴的目錄檢索函式中就行啦!(嘻,不要告訴我你不會遞迴啊!)
 這樣,我們同樣可以寫出一個點歌(嘻,我喜歡聽)把歌手做成目錄名,把歌曲加上中文名稱,一切就OK啦!想聽帶“愛”的歌?OK!打入愛字!你就能找出所有帶愛的歌了!(比如說:愛你愛到骨頭裡!嘻,排骨樂隊!JACK主唱!)
 另外,你加上擴充套件程式碼(刪除指定檔案的程式碼),若配合的ASP程式碼,你甚至可以寫出一個的維護系統呢!當然,這種事情JACK是不做的!ASP不夠完美,對二進位制的檔案讀寫無能為力!所以只能操作文字檔案,嘻嘻,美夢泡湯了?不要緊,用VC啦!寫IS能做到呢!

 下面的程式碼,由於註釋很完整(JACK一下午不上網才寫出來的呢!嘻,不知又有多少MM在CHAT裡等我等得心痛了呢!),我就不多說了,請大家自己分析啦!
'從FORM變數集得到要查詢的檔名稱所要包含的字串
data=request.form("search_data")
'函式查詢目標查詢目錄下的所有子目錄(所有子樹)
'函式呼叫的規則:search_folder(要查詢的字串,查詢目標的虛擬絕對路徑,查詢目標的真實絕對路徑)
p=search_folder(data,"","c:websharewwwcgi-bin")
%>

<BR>'目錄檢索函式 <BR>function search_folder(search_data,v_path,c_path) <BR>dim file_system,cur_folder,sub_folders,sub_files <BR>'確定查詢字串有效非空 <BR>if not isempty(search_data) and len(search_data)>0 then <BR>'建立檔案系統 <BR>set file_system=create("scripting.filesystemobject") <BR>'建立建立當前目錄物件 <BR>set cur_folder=file_system.getfolder(c_path) <BR>'建立當前目錄的子目錄物件集合 <BR>set sub_folders=cur_folder.subfolders <BR>'對子目錄集合進行遍歷 <BR>for each each_sub_folder in sub_folders <BR>'確定子目錄的屬性為普通子目錄 <BR>if each_sub_folder.attributes=16 then <BR>'得到當前的子虛擬絕對路徑與真實絕對路徑 <BR>'注:此程式預設子目錄與子虛擬目錄為同一級別且名稱一致. <BR>sub_v_path=v_path&"/"&each_sub_folder.name <BR>sub_c_path=c_path&""&each_sub_folder.name <BR>'呼叫檔案檢索函式對當前子目錄下的檔案進行字串匹配檢索 <BR>p=search_file(search_data,sub_v_path,sub_c_path) <BR>'遞迴檢索當前子目錄的下一級目錄 <BR>p=search_folder(search_data,sub_v_path,sub_c_path) <BR>end if <BR>next <BR>'清除所有端物件 <BR>set each_sub_folder=nothing <BR>set sub_folders=nothing <BR>set cur_folder=nothing <BR>set file_system=nothing <BR>end if <BR>end function <BR>'******************************** <BR>'檔案匹配檢索函式 <BR>function search_file(search_data,v_path,c_path) <BR>dim file_system,sub_files,sub_file_v_path,sub_out_v_path <BR>'確認路徑不為空 <BR>if not isempty(c_path) then <BR>set file_system=createobject("scripting.filesystemobject") <BR>set cur_folder=file_system.getfolder(c_path) <BR>'建立檢索目錄下的檔案物件集合 <BR>set sub_files=cur_folder.files <BR>'遍歷檔案物件集合 <BR>for each each_file in sub_files <BR>'匹配字串與檔名 <BR>if instr(each_file.name,search_data)<>0 then <BR>'建立可用連結,輸出匹配檔案 <BR>sub_file_v_path=v_path&"/"&each_file.name <BR>'替換路徑及檔名中可能出現的空格,以便WEB能正常確定路徑 <BR>sub_out_v_path=Replace(sub_file_v_path," ","%20") <BR>response.write("<p><a href="&sub_out_v_path&">"&sub_file_v_path&"</a>") <BR>end if <BR>next <BR>set sub_out_v_path=nothing <BR>set sub_file_v_path=nothing <BR>set each_file=nothing <BR>set sub_files=nothing <BR>set file_system=nothing <BR>end if <BR>end function <BR>


歡迎大家經常來我的主頁看看,大家交流一下!我的主頁主要是一些的源創C++與ASP程式碼(JACK及源創C++與ASP程式碼)。
主頁地址:">

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987488/,如需轉載,請註明出處,否則將追究法律責任。

相關文章