學會了FSO提取檔案值,也學會了將資訊輸入到檔案中,那下面就再來應用應用下。
不知道你有沒有這樣的習慣:看到一個檔案,不自覺的右鍵選擇用記事本開啟。呵呵,幾乎沒有哪個檔案是不可以的。所以現在,可以預設所有檔案都是文本,只是尾碼名不同而已;那麼也就是說,現在可以提取任一檔案的內容資訊。OK,就來想象一下:
1,提取一個檔案的路徑(採用file按鈕進行尋找定位)
2,將該路徑檔案開啟,並讀取所有行
3,顯示讀取的資訊
一、viewcode.asp
<% Function ShowCode(filename) Set fso = Server.CreateObject("Scripting.FileSystemObject") Set cnrs = fso.OpenTextFile(filename, 1) While Not cnrs.AtEndOfStream rsline = cnrs.ReadLine rsline = server.HTMLEncode(rsline) Response.Write(rsline & "<br>") Wend end Function %><form action="viewcode.asp" method="post"> 輸入檔案名稱<input type="file" name="filename"> <input type="submit" value="查看來源程式"> </form> <% file=request.form("filename") response.write (file & "來源程式如下<hr>") If trim(file)<> "" then Call ShowCode(file) End If %> |
以上程式調試時,可以選擇html,asp頁面,也可以開啟任一應用程式等。
定義的ShowCode函數,主要作用是開啟、讀取並顯示檔案中所有資訊內容。注意添加了server.HTMLEncode(rsline),針對含有標準HTML代碼的檔案。
顯示檔案中所有行即用一條件迴圈進行遍曆顯示了。
While Not cnrs.AtEndOfStream
...
Wend
接著,下面的這個例題具體就涉及open方法的問題了,還記得?正常情況之下開啟檔案是採用fso.OpenTextFile("c:\testfile.txt",1),參數1的作用是:以唯讀模式開啟檔案。不能對此檔案進行寫操作。如果現在已經存在一檔案,需要進行追加寫入,則該怎麼辦呢?簡單,參數為8即可。
PS:這裡還有一種讀取的方法。
<% whichfile=server.mappath("test.txt") Set fso = CreateObject("Scripting.FileSystemObject") Set txt = fso.OpenTextFile(whichfile,1) rline = txt.ReadAll rline=replace(Server.HtmlEncode(rline),Chr(13),"<br>") Response.Write rline txt.Close %> |
這有什麼用呢?呵呵,亞瑪遜的網路故事接龍就是如此:能接龍就需要首先要顯示原有故事,然後自己添加故事寫入檔案。這其中的寫入檔案最講究的就是追加寫入了。所以下面就可以實現。
二、story.asp
<% If not request.Form("NextLine")="" then Set fso=Server.CreateObject("Scripting.FileSystemobject") textfile1=Server.MapPath("story.txt") set cnrs=fso.OpenTextFile(textfile1,8) cnrs.WriteLine(Request.Form("NextLine")) cnrs.Close end if %> 故事如下: <% Set fso=Server.CreateObject("Scripting.FileSystemObject") textfile1=Server.MapPath("story.txt") set cnrs=fso.OpenTextFile(textfile1,1) while not cnrs.AtEndOfStream Response.Write " " & cnrs.ReadLine wend cnrs.close %> <hr> <form method="post" action="story.asp"> 請輸入這個故事的新行:<input name="NextLine" type="text" size="70"> <input type="submit" value="提交"> </form> |
整個就是一很簡單的讀取資訊和加入資訊的混合利用,相信有了前面的基礎看懂應該不成問題。當然還缺少個story.txt檔案,裡面寫好故事開頭就可以了。
調試地址:
http://www.cnbruce.com/code/story.asp
再下面,繼續來,該側重點主要就是練習一些函數的提示了。
1,instr函數:返回某字串在另一字串中第一次出現的位置。
比如現在尋找字母“A”在字串“A110B121C119D1861”中第一次出現的位置,則可以
<script language=vbs><br />my_string = "A110B121C119D1861"<br />a_num = instr(my_string,"A")<br />alert(a_num)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
同樣字母“B”的位置也就能確定。現在就來最關鍵的:提前字母“A”和“B”中間的值“110”。
還記得mid函數嗎?mid函數的主要作用是:從字串中返回指定數目的字元。
比如現在的“110”則應該是從字串的第2位取得3個單位的值。
<script language=vbs><br />my_string = "A110B121C119D1861"<br />a_value = mid(my_string,2,3)<br />alert(a_value)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
但設想一下:如果不是“110”,而是“1100”,那是不是要提取4位……這樣就顯出程式的不夠完美。
所以繼續思考:所提取的值,永遠是在字母“A”後面的,且值也永遠是在字母“A”和“B”之間的,那麼只要分別提取出“A”、“B”的位置,則中間數值的起始位應是字母“A”位+1,中間數值的長度應是字母“B”位-字母“A”位-1
那麼現在就可以讓程式完美起來:
<script language=vbs><br />my_string = "A110B121C119D1861"<br />a_num = instr(my_string,"A")<br />b_num = instr(my_string,"B")<br />a_value = mid(my_string,a_num+1,b_num-a_num-1)<br />alert(a_value)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
OK,那麼現在你也就完全可以把字母“B”、“C”、“D”後面的值一一提取了。
當然需要注意的就是“D”後面有幾位怎麼取呢?採用字串總長度-字母D所在位置數就可以了。
<script language=vbs><br />my_string = "A110B121C119D1861"<br />a_num = instr(my_string,"A")<br />b_num = instr(my_string,"B")<br />c_num = instr(my_string,"C")<br />d_num = instr(my_string,"D")<br />total_num = len(my_string)<br />a_value = mid(my_string,a_num+1,b_num-a_num-1)<br />b_value = mid(my_string,b_num+1,c_num-b_num-1)<br />c_value = mid(my_string,c_num+1,d_num-c_num-1)<br />d_value = mid(my_string,d_num+1,total_num-d_num)<br />alert(a_value)<br />alert(b_value)<br />alert(c_value)<br />alert(d_value)<br /></script><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
用到現在,你也許確實學到了不少,但也許會提出疑問:這個放在FSO檔案操作裡有什麼作用呢?
那下面才是我們的正題:用FSO進行簡單的文本投票。
投票頁面首要的就是顯示各類項目的投票數,並相應賦於某個變數。然後判斷本次投票的選相,相對應地將投票數值加1,完畢後再將所有值繼續寫入文本。
1,一個HTML表單頁website.html
以做投票點擊的平台。
<form action="result.asp" method="post"><br /><input type="radio" name="website" value="A" checked> cnbruce.com<br><br /><input type="radio" name="website" value="B"> blueidea.com<br><br /><input type="radio" name="website" value="C"> it365cn.com<br><br /><input type="radio" name="website" value="D"> 5d.cn<br><br /><input type="submit"><br /><input type="reset"><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
2,接受表單頁值的result.asp
<% whichfile=server.mappath("site.txt") set fso=createobject("Scripting.FileSystemObject") set thisfile=fso.opentextfile(whichfile) my_string=thisfile.readlinea_num = instr(my_string,"A") b_num = instr(my_string,"B") c_num = instr(my_string,"C") d_num = instr(my_string,"D") total_num = len(my_string) a_value = mid(my_string,a_num+1,b_num-a_num-1) b_value = mid(my_string,b_num+1,c_num-b_num-1) c_value = mid(my_string,c_num+1,d_num-c_num-1) d_value = mid(my_string,d_num+1,total_num-d_num) select case request.form("website") case "A": a_value=a_value+1 case "B": b_value=b_value+1 case "C": c_value=c_value+1 case "D": d_value=d_value+1 end select mynew_string="A" & cstr(a_value) & "B" & cstr(b_value) & "C" & cstr(c_value) & "D" & cstr(d_value) set newfile=fso.createtextfile(whichfile) newfile.writeLine(mynew_string) newfile.close set fso=nothing %> 當前投票:<br> cnbruce.com:<%=a_value%><br> blueidea.com:<%=b_value%><br> it356cn.com:<%=c_value%><br> 5d.cn:<%=d_value%><br> <a href="website.html">返回繼續</a> |
有了上面函數的基礎,看這個應該不是很難的
3,最後不要忘了的記數檔案site.txt
格式:A1B1C1D1
調試地址:
http://www.cnbruce.com/code/website.html
OK,三個檔案就可以勝任一個很簡單的投票系統了,如果要加強,需要細化的則結合以前的知識吧,比如投過一次後設定session或者cookies,當再次投票時候判斷如果session或者cookies存在則不允許,也就是簡單的投票防作假手段了……當然更多的還是要自己去想去實踐了。