Posted: 2005/1月/07 10:49上午 | IP記錄
|
|
|
在一個文件中讀寫數據
這部分介紹如何讀寫一個文本文件。這對文本文件有很多用處,包括下面這些。
■一個常用的日誌,利用文本文件記錄訪問者的活動以供日後參考。你可以記錄諸如訪問者IP地址,瀏覽器類型等等你能得到而且想要 瞭解的東西。
■Form中的數據,你可以將用戶在Form的文本框中填寫的東西記入文本文件,儘管使用數據庫會更加有效。
■每日新聞,將每日的新消息記錄到文本文件,然後可以在很多文件中讀出來顯示
對文本文件的寫操作
要創建並且寫入一個文本文件,你應當使用FileSystemObject和TextStream對象。首先,你需要創建一個F ileSystemObject對象的事例,然後,再利用CreateTextFile()以該事例創建一個TextStrea m對象的事例,最後利用TextStream對象的WriteLine()方法來寫入文件。下面是這個例子:
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.CreateTextFile(「c:\mydir\test.txt」)
MyTextFile.WriteLine(「歡迎進入邁至科網絡ASP教程文件操作示例!」
MytextFile.Close
%>
這個例子創建了一個名字為test.txt的文件,該文件位於c:\mydir\,WriteLine()方法被用來將那一句話 寫入該文件。最後,這個TextStream對象的事例關閉並且釋放所有資源,下面部分將對每一個步驟進行仔細解釋。
注意
如果你需要虛擬路徑轉化為真實路徑(這樣操作使得站點具有更強的可移植性),可以用Server.MapPath()方法,例如 下面這個例子:
PhysicalPath=Server.MapPath(「/private/test.txt」)
假設虛擬路徑/private對應於真實路徑c:\net\private,那麼這個PhysicalPath的值將是c:\n et\private\test.txt
CreateTextFile()方法用來創建一個新的文本文件,當這個方法被調用,那麼就返回一個TextStream對象, 這個方法有一個必須的參數和兩個可選的參數。
■FileSpecifier,限定要創建的文件及路徑,如果沒有這個參數,顯然是要報錯的。
■Overwrite,這個參數是可選的,默認為TRUE,如果存在同名的文件,依據這個參數判斷是否進行覆蓋操作,如果賦為F ALSE,那麼存在同名文件時會返回錯誤信息。
■Unicode,這個參數可選,默認為False,指示該文件是否用ASC碼形式進行創建和保存。如果選擇TRUE,將以Un icode方式創建。
再利用CreateTextFile()方法創建了文本文件後,你就可以使用TextStream對像來對文件進行讀寫,在寫操 作時,有如下的方法:
■Write(String).這個方法將一個字段寫入文本文件。
■WriteLine(String),這個方法是在文件中添加字串和一個分行符,這裡面的string參數可選,如果沒有的話 ,則添加一個分行符。
■WriteBlankLines(lines),顧名思義,這是允許用戶在文件中指定數目個分行符。
■close.這個方法就是關閉一個打開的TextStream文件並釋放其佔用的資源。
下面是一個連續在文件中輸出32行同樣字符串的例子腳本:
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.CreateTextFile(「c:\mydir\test.txt」)
For i=1 to 32
MyTextFile.WriteLine(「Hello World!」)
Next
MyTextFile.Close
%>
在文本文件中讀取和追加數據
這裡,首先要做的依然是創建一個FileSystemObject對象的事例,然後,利用OpenTextFile()方法來創 建一個TextStream對象的事例,最後,你就可以用TextStream對象的ReadLine方法來對文件讀取,下面是 個例子:
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.OpenTextFile(「c:\mydir\test.txt」)
While not MyTextFile.AtEndOfStream
Response.Write(MyTextFile.ReadLine)
Wend
MyTextFile.Close
%>
這個腳本將文本文件Test.txt文件中所有的內容讀出來並且顯示在瀏覽器上。如果文件不存在,回顯示相應錯誤信息(在下一個 部分,你會學到怎樣檢測一個文件是否存在)
其中While…Wend循環是將文件內容一行一行的循環讀取,其中如果沒有到達文件末尾,那麼AtEndOfStream屬性 就會是False,直到末尾時變為True。
下面是讀取文件時可能會用到的屬性:
■AtEndOfLine。這個屬性判斷是否到了文件中一個特定行的末尾,如果不是,則為False,反之為True
■AtEndOfStream。就是這個例子中用到的,判斷是否到了該文件的結尾並依此返回True和False
■Column。這個屬性判斷當前字符在該行的位置,返回一個整數值。
■Line。這個屬性判斷當前行在文件中的行數,返回一個整數值
除了使用ReadLine方法以外,你當然還可以使用Read()方法。Read()方法會從指定打開的文本文件中返回指定數目 個字符。下面是用這個方法的示例:
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.OpenTextFile(「c:\mydir\test.txt」)
While NOT MyTextFile.AtEndOfLine
Response.Write(MyTextFile.Read(1))
WEND
MyTextFile.Close
%>
這個腳本從文本文件中接受第一行,每次接受顯示一個字符,利用AtEndOfLine屬性一直到行尾截止,由Read(1)一個 一個讀取。
下面是從文本文件讀取數據時要用到的方法
■Read(Number).從文本文件中讀取限定數目個字符
■ReadLine.從文本文件中讀取一行(換行符不返回)
■ReadAll.這個方法接受TextStream文件的所有內容
■Skip(Number).這個方法從一個打開的文本文件中跳過指定數目個字符
■close關閉當前打開的文件並釋放所佔用的資源。
一般說來,OpenTextFile()方法是用來讀取數據的,但是你也可以用它追加數據信息,例如,你希望在該文本數據中追加 一些新內容,可以見下面的示例:
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.OpenTextFile(「c:\mydir\browser.log」, 8,TRUE)
MyTextFile.WriteLine(Request.ServerVariables(「HTTP_USER_AGEN T」))
MyTextFile.Close
%>
這個腳本用於在網站中創建一個日誌文件。無論什麼時候這個腳本執行,此時的瀏覽器類型就會追加到該日誌文件中,瀏覽器信息由Se rverVariables集合接收。
注意
有關ServerVariables集合的情況參見本書的第14章有關小節。
這裡面需要說明的是,如果browser.log不存在,則會自動建立,這是使用了OpenTextFile()方法的兩個參數 :IOMode和Create參數。
下面介紹針對於OpenTextFile()方法的所有參數:
■FileSpecifier,限定要進行讀寫或者追加的文本文件名稱
■IOMODE,可選參數,指示該文件是被用來讀,寫還是追加。默認為1表示讀,設為2表示進行寫操作,進行追加操作則設為8。
■Create,可選參數,如果文件不存在是否創建,默認為False,如果希望進行創建,則設為TRUE
■Format,可選參數,指示文件是ASCII碼制格式還是Unicode格式,作為默認的ASCII碼制文件,其值為-2, 如果希望設為Unicode格式,此參數設為-1
你不能在當前版本的Active Server Pages中使用常量,例如,你如果希望進行文件 追加,你必須使用數字8作為參數而不是什麼常量。
範例應用
這部分提供了一個範例應用來使得讀者對這些對像、方法、屬性、以及集合、有更加明晰的認識瞭解。在世界最大的網上書店,美國亞馬 遜網上書店(www.amazon.com)正在進行(也許您在閱讀時這個活動還在進行)網上的故事合創運動,由John Updike先生寫入 該故事的第一部分,每一天,訪問者都可以根據自己的意願在線進行故事發展的寫作,同時每一天都會對寫的最好的給出$1000的獎 賞(如果您的英語寫作足夠好,不妨一試)。這個故事是大家一起添加的。
這真是個好主意,這下子網站的『回頭客』就會激增,同時產生巨大的社會影響力,你完全可以在自己的網站上實現類似的應用。最簡單 的方法就是直接把這個範例拿出去放到你的網站上,當然,如果你的網站還不能支持Active Server Pages,那麼只好說你太不幸運了(見圖19.1)。
例子19.1 Story.asp腳本
<%
IF NOT Request.Form(「NextLine」)=」」 THEN
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyTextFile=MyFileObject.CreateTextFile(「C:\MyDir\TheStory.tx t」,8,TRUE)
MyTextFile.WriteLine(Request.Form(「NextLine」))
MyTextFile.Close
END IF
%>
<HTML>
<HEAD><TITLE>在線故事接龍</TITLE></HEAD>
<BODY>
<hr>
<%
Set MyFileObject=Server.CreateObject(「Scripting.FileSystemObject 」)
Set MyText=MyFileObject.OpenTextFile(「C:\MyDir\TheStory.txt」)
WHILE NOT MyTextFile.AtEndOfStream
Response.Write(「&nsp;&nsp;」&MyTextFile.Readline)
WEND
MyTextFile.Close
%>
<HR>
<H3>請輸入這個故事的新行:</h3>
<Form method=」post」 action=」Story.asp」>
<input name=」NextLine」 Type=Text Size=70>
<input type=Submit Value=」確認添加這一句」>
</Form>
</Body>
</HTML>
圖19.1 一個在線的故事接龍
這個Active Server Pages文件包含兩段主要腳本,第一部分是看是否有Form傳來的 句子信息,如果有,則該句子添加到TheStory.txt文件中去。第二部分是顯示TheStory.txt文件中的內容,請 注意其中每一行之間用兩個 來進行分隔,參見HTML中符號含義。然後用一個Form提供訪問者進行添加,其中 Form執行還是這個文件,(就是第一部分腳本處理),因此注意該文件名稱必須是」story.asp」
其實這個應用實在是過於簡單,但是作一個留言版相當合適,而且在該文件膨脹過大時,只要刪除就可以了,(不要忘了前面的腳本中將 OpenTextFile的Create參數設為TRUE)是可以創建文本文件的。
|