ASP編程入門(mén)進(jìn)階(十八):FSO組件之文件操作(中)
更新時(shí)間:2007年01月03日 00:00:00 作者:
學(xué)會(huì)了FSO提取文件值,也學(xué)會(huì)了將信息輸入到文件中,那下面就再來(lái)應(yīng)用應(yīng)用下。
不知道你有沒(méi)有這樣的習(xí)慣:看到一個(gè)文件,不自覺(jué)的右鍵選擇用記事本打開(kāi)。呵呵,幾乎沒(méi)有哪個(gè)文件是不可以的。所以現(xiàn)在,可以默認(rèn)所有文件都是文本,只是后綴名不同而已;那么也就是說(shuō),現(xiàn)在可以提取任一文件的內(nèi)容信息。OK,就來(lái)想象一下:
1,提取一個(gè)文件的路徑(采用file按鈕進(jìn)行查找定位)
2,將該路徑文件打開(kāi),并讀取所有行
3,顯示讀取的信息
一、viewcode.asp
以上程序調(diào)試時(shí),可以選擇html,asp頁(yè)面,也可以打開(kāi)任一應(yīng)用程序等。
定義的ShowCode函數(shù),主要作用是打開(kāi)、讀取并顯示文件中所有信息內(nèi)容。注意添加了server.HTMLEncode(rsline),針對(duì)含有標(biāo)準(zhǔn)HTML代碼的文件。
顯示文件中所有行即用一條件循環(huán)進(jìn)行遍歷顯示了。
While Not cnrs.AtEndOfStream
...
Wend
接著,下面的這個(gè)例題具體就涉及open方法的問(wèn)題了,還記得?正常情況之下打開(kāi)文件是采用fso.OpenTextFile("c:\testfile.txt",1),參數(shù)1的作用是:以只讀模式打開(kāi)文件。不能對(duì)此文件進(jìn)行寫(xiě)操作。如果現(xiàn)在已經(jīng)存在一文件,需要進(jìn)行追加寫(xiě)入,則該怎么辦呢?簡(jiǎn)單,參數(shù)為8即可。
PS:這里還有一種讀取的方法。
這有什么用呢?呵呵,亞瑪遜的網(wǎng)絡(luò)故事接龍就是如此:能接龍就需要首先要顯示原有故事,然后自己添加故事寫(xiě)入文件。這其中的寫(xiě)入文件最講究的就是追加寫(xiě)入了。所以下面就可以實(shí)現(xiàn)。
二、story.asp
整個(gè)就是一很簡(jiǎn)單的讀取信息和加入信息的混合利用,相信有了前面的基礎(chǔ)看懂應(yīng)該不成問(wèn)題。當(dāng)然還缺少個(gè)story.txt文件,里面寫(xiě)好故事開(kāi)頭就可以了。
調(diào)試地址:
http://www.cnbruce.com/code/story.asp
再下面,繼續(xù)來(lái),該側(cè)重點(diǎn)主要就是練習(xí)一些函數(shù)的使用技巧了。
1,instr函數(shù):返回某字符串在另一字符串中第一次出現(xiàn)的位置。
比如現(xiàn)在查找字母“A”在字符串“A110B121C119D1861”中第一次出現(xiàn)的位置,則可以
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
同樣字母“B”的位置也就能確定?,F(xiàn)在就來(lái)最關(guān)鍵的:提前字母“A”和“B”中間的值“110”。
還記得mid函數(shù)嗎?mid函數(shù)的主要作用是:從字符串中返回指定數(shù)目的字符。
比如現(xiàn)在的“110”則應(yīng)該是從字符串的第2位取得3個(gè)單位的值。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
但設(shè)想一下:如果不是“110”,而是“1100”,那是不是要提取4位……這樣就顯出程序的不夠完美。
所以繼續(xù)思考:所提取的值,永遠(yuǎn)是在字母“A”后面的,且值也永遠(yuǎn)是在字母“A”和“B”之間的,那么只要分別提取出“A”、“B”的位置,則中間數(shù)值的起始位應(yīng)是字母“A”位+1,中間數(shù)值的長(zhǎng)度應(yīng)是字母“B”位-字母“A”位-1
那么現(xiàn)在就可以讓程序完美起來(lái):
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
OK,那么現(xiàn)在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
當(dāng)然需要注意的就是“D”后面有幾位怎么取呢?采用字符串總長(zhǎng)度-字母D所在位置數(shù)就可以了。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
用到現(xiàn)在,你也許確實(shí)學(xué)到了不少,但也許會(huì)提出疑問(wèn):這個(gè)放在FSO文件操作里有什么作用呢?
那下面才是我們的正題:用FSO進(jìn)行簡(jiǎn)單的文本投票。
投票頁(yè)面首要的就是顯示各類(lèi)項(xiàng)目的投票數(shù),并相應(yīng)賦于某個(gè)變量。然后判斷本次投票的選相,相對(duì)應(yīng)地將投票數(shù)值加1,完畢后再將所有值繼續(xù)寫(xiě)入文本。
1,一個(gè)HTML表單頁(yè)website.html
以做投票點(diǎn)擊的平臺(tái)。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
2,接受表單頁(yè)值的result.asp
有了上面函數(shù)的基礎(chǔ),看這個(gè)應(yīng)該不是很難的
3,最后不要忘了的記數(shù)文件site.txt
格式:A1B1C1D1
調(diào)試地址:
http://www.cnbruce.com/code/website.html
OK,三個(gè)文件就可以勝任一個(gè)很簡(jiǎn)單的投票系統(tǒng)了,如果要加強(qiáng),需要細(xì)化的則結(jié)合以前的知識(shí)吧,比如投過(guò)一次后設(shè)置session或者cookies,當(dāng)再次投票時(shí)候判斷如果session或者cookies存在則不允許,也就是簡(jiǎn)單的投票防作假手段了……當(dāng)然更多的還是要自己去想去實(shí)踐了。
不知道你有沒(méi)有這樣的習(xí)慣:看到一個(gè)文件,不自覺(jué)的右鍵選擇用記事本打開(kāi)。呵呵,幾乎沒(méi)有哪個(gè)文件是不可以的。所以現(xiàn)在,可以默認(rèn)所有文件都是文本,只是后綴名不同而已;那么也就是說(shuō),現(xiàn)在可以提取任一文件的內(nèi)容信息。OK,就來(lái)想象一下:
1,提取一個(gè)文件的路徑(采用file按鈕進(jìn)行查找定位)
2,將該路徑文件打開(kāi),并讀取所有行
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 %> |
以上程序調(diào)試時(shí),可以選擇html,asp頁(yè)面,也可以打開(kāi)任一應(yīng)用程序等。
定義的ShowCode函數(shù),主要作用是打開(kāi)、讀取并顯示文件中所有信息內(nèi)容。注意添加了server.HTMLEncode(rsline),針對(duì)含有標(biāo)準(zhǔn)HTML代碼的文件。
顯示文件中所有行即用一條件循環(huán)進(jìn)行遍歷顯示了。
While Not cnrs.AtEndOfStream
...
Wend
接著,下面的這個(gè)例題具體就涉及open方法的問(wèn)題了,還記得?正常情況之下打開(kāi)文件是采用fso.OpenTextFile("c:\testfile.txt",1),參數(shù)1的作用是:以只讀模式打開(kāi)文件。不能對(duì)此文件進(jìn)行寫(xiě)操作。如果現(xiàn)在已經(jīng)存在一文件,需要進(jìn)行追加寫(xiě)入,則該怎么辦呢?簡(jiǎn)單,參數(shù)為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 %> |
這有什么用呢?呵呵,亞瑪遜的網(wǎng)絡(luò)故事接龍就是如此:能接龍就需要首先要顯示原有故事,然后自己添加故事寫(xiě)入文件。這其中的寫(xiě)入文件最講究的就是追加寫(xiě)入了。所以下面就可以實(shí)現(xiàn)。
二、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"> 請(qǐng)輸入這個(gè)故事的新行:<input name="NextLine" type="text" size="70"> <input type="submit" value="提交"> </form> |
整個(gè)就是一很簡(jiǎn)單的讀取信息和加入信息的混合利用,相信有了前面的基礎(chǔ)看懂應(yīng)該不成問(wèn)題。當(dāng)然還缺少個(gè)story.txt文件,里面寫(xiě)好故事開(kāi)頭就可以了。
調(diào)試地址:
http://www.cnbruce.com/code/story.asp
再下面,繼續(xù)來(lái),該側(cè)重點(diǎn)主要就是練習(xí)一些函數(shù)的使用技巧了。
1,instr函數(shù):返回某字符串在另一字符串中第一次出現(xiàn)的位置。
比如現(xiàn)在查找字母“A”在字符串“A110B121C119D1861”中第一次出現(xiàn)的位置,則可以
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
同樣字母“B”的位置也就能確定?,F(xiàn)在就來(lái)最關(guān)鍵的:提前字母“A”和“B”中間的值“110”。
還記得mid函數(shù)嗎?mid函數(shù)的主要作用是:從字符串中返回指定數(shù)目的字符。
比如現(xiàn)在的“110”則應(yīng)該是從字符串的第2位取得3個(gè)單位的值。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
但設(shè)想一下:如果不是“110”,而是“1100”,那是不是要提取4位……這樣就顯出程序的不夠完美。
所以繼續(xù)思考:所提取的值,永遠(yuǎn)是在字母“A”后面的,且值也永遠(yuǎn)是在字母“A”和“B”之間的,那么只要分別提取出“A”、“B”的位置,則中間數(shù)值的起始位應(yīng)是字母“A”位+1,中間數(shù)值的長(zhǎng)度應(yīng)是字母“B”位-字母“A”位-1
那么現(xiàn)在就可以讓程序完美起來(lái):
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
OK,那么現(xiàn)在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
當(dāng)然需要注意的就是“D”后面有幾位怎么取呢?采用字符串總長(zhǎng)度-字母D所在位置數(shù)就可以了。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
用到現(xiàn)在,你也許確實(shí)學(xué)到了不少,但也許會(huì)提出疑問(wèn):這個(gè)放在FSO文件操作里有什么作用呢?
那下面才是我們的正題:用FSO進(jìn)行簡(jiǎn)單的文本投票。
投票頁(yè)面首要的就是顯示各類(lèi)項(xiàng)目的投票數(shù),并相應(yīng)賦于某個(gè)變量。然后判斷本次投票的選相,相對(duì)應(yīng)地將投票數(shù)值加1,完畢后再將所有值繼續(xù)寫(xiě)入文本。
1,一個(gè)HTML表單頁(yè)website.html
以做投票點(diǎn)擊的平臺(tái)。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
2,接受表單頁(yè)值的result.asp
<% whichfile=server.mappath("site.txt") set fso=createobject("Scripting.FileSystemObject") set thisfile=fso.opentextfile(whichfile) my_string=thisfile.readline a_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 %> 當(dāng)前投票:<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">返回繼續(xù)</a> |
有了上面函數(shù)的基礎(chǔ),看這個(gè)應(yīng)該不是很難的
3,最后不要忘了的記數(shù)文件site.txt
格式:A1B1C1D1
調(diào)試地址:
http://www.cnbruce.com/code/website.html
OK,三個(gè)文件就可以勝任一個(gè)很簡(jiǎn)單的投票系統(tǒng)了,如果要加強(qiáng),需要細(xì)化的則結(jié)合以前的知識(shí)吧,比如投過(guò)一次后設(shè)置session或者cookies,當(dāng)再次投票時(shí)候判斷如果session或者cookies存在則不允許,也就是簡(jiǎn)單的投票防作假手段了……當(dāng)然更多的還是要自己去想去實(shí)踐了。
相關(guān)文章
如何將長(zhǎng)的標(biāo)題用省略號(hào)收尾
如何將長(zhǎng)的標(biāo)題用省略號(hào)收尾...2007-02-02asp,VBscript語(yǔ)法錯(cuò)誤,史上最全最詳細(xì)最精確
asp,VBscript語(yǔ)法錯(cuò)誤,史上最全最詳細(xì)最精確...2007-03-03asp Http_Referer,Server_Name和Http_Host
以前感覺(jué)Request.ServerVariables里的值很多,現(xiàn)在看看還是那么多,不過(guò)今天談其中的一個(gè)值----HTTP_Referer以及Request.ServerVariables里Server_Name與Http_Host之間有什么區(qū)別呢?2009-04-04如何遠(yuǎn)程調(diào)用ACCESS數(shù)據(jù)庫(kù)[要求加精??!]
如何遠(yuǎn)程調(diào)用ACCESS數(shù)據(jù)庫(kù)[要求加精!!]...2006-06-06ASP中的時(shí)間函數(shù)大全 時(shí)間操作函數(shù)
ASP中的時(shí)間函數(shù)大全 時(shí)間操作函數(shù)...2006-09-09后臺(tái)管理登錄篇-asp設(shè)計(jì)與數(shù)據(jù)庫(kù)
后臺(tái)管理登錄篇-asp設(shè)計(jì)與數(shù)據(jù)庫(kù)...2007-02-02ASP的Error對(duì)象知識(shí)簡(jiǎn)析
這篇文章主要介紹了ASP的Error對(duì)象,需要的朋友可以參考下2015-09-09