- 深入解析ASP核心技術
- 王洪影
- 1303字
- 2019-01-03 18:15:37
1.7.3 操作文本流
得到一個TextStream對象之后,就可以通過它進行文件的讀取和寫入操作了。當然,這還取決于文件的打開方式。
下面介紹一下TextStream對象的屬性和方法。
1. 與位置相關的屬性
在TextStream對象的眼里,文本文件是由一行一行的數據組成的,而每一行又是由一列一列組成的,這個一列就是指一個字符。不管是讀取還是寫入,都是以字符為單位或以行為單位的。伴隨著讀取或寫入的操作,文件指針也在移動著,它標示著當前操作的位置。
下面看一下幾個與位置相關的屬性。
?Line屬性,指針當前所在的行號,從1開始。
?Column屬性,指針當前所在的列號,對每一行來說,都是從1開始的。
?AtEndOfLine屬性,如果指針位于一行的末尾,該屬性返回True,否則返回False。
?AtEndOfStream屬性,如果指針位于文件的末尾,該屬性返回True,否則返回False。
AtEndOfLine和AtEndOfStream屬性只在只讀方式時才可以用。
2. 讀取數據的方法
讀取數據相關的方法有以下幾個:
?Read方法,讀取指定個數的字符,參數是字符個數。
?ReadLine方法,讀取一行數據,不包括行分隔符,指針移動到下一行第一列。
?ReadAll方法,讀取所有數據,指針移動到文件末尾。
?Skip方法,跳過指定個數的字符,參數是字符個數。
?SkipLine方法,跳過一行數據,指針移動到下一行第一列。
不管是讀取數據還是跳過數據,它們都是從當前位置開始操作的。
對于ReadAll方法來說,如果指針位于文件開頭,那么它的作用就是讀取文件的所有數據;如果指針位于其他位置,則是從該位置開始讀取剩余的所有數據。
ReadLine方法和SkipLine方法,都是從當前位置開始,查找下一個行分隔符,ReadLine方法會讀取中間這段數據,然后跳過行分隔符;而SkipLine方法會直接跳過行分隔符,不會讀取數據。這就意味著,如果指針位于一行的中間位置,那么這兩個方法讀取或跳過的僅僅是當前這一行而已。再極端一點,如果指針恰好位于行末尾,即行分隔符之前的位置上,那么ReadLine方法讀取的就是空字符串。
對于Read方法和Skip方法來說,行分隔符僅僅是兩個字符而已(指CR和LF,當然,也可能是一個字符CR或LF),與其他字符沒有什么不同,該讀就讀,該跳就跳。所以,這兩個方法是可以讀取或跳過多行數據的。
TextStream對象讀取數據,只能單向進行,指針無法回頭,過去了就過去了,無法再重來第二遍。想重新讀取數據,只能再次打開文件。
以上幾個方法只有在以只讀方式打開文件時才可以使用。
下例將演示各種數據讀取方法。
TextStreamPosition.asp
<%@codepage=936%> <% Response.Charset = "GBK" '輸出指針位置信息的方法 Sub PrintInfo(file) Response.Write file.Line & "行" & file.Column & "列," Response.Write "行末尾:" & txtFile.AtEndOfLine & ", " Response.Write "文件末尾:" & txtFile.AtEndOfStream &"<hr>" End Sub '當前目錄下的TextStreamPositionTest.txt filePath = Server.MapPath(".") & "\TextStreamPositionTest.txt" Set fso = CreateObject("Scripting.FileSystemObject") '打開文本文件(只讀方式,不創建新文件,使用Unicode編碼) Set txtFile = fso.OpenTextFile(filePath,1, False, -1) '讀取文件中的所有數據 Response.Write "所有數據:<br>" Response.Write "<textarea rows=4>" & txtFile.ReadAll() & "</textarea><hr>" '關閉TextStream對象 txtFile.Close '再次打開文件 Set txtFile = fso.OpenTextFile(filePath,1, False, -1) '輸出指針位置信息 Call PrintInfo(txtFile) '讀取7個字符 Response.Write "<textarea rows=2>" & txtFile.Read(7) & "</textarea>" Call PrintInfo(txtFile) '讀取5個字符 Response.Write "<textarea rows=2>" & txtFile.Read(5) & "</textarea>" Call PrintInfo(txtFile) '讀取一行數據 Response.Write "<textarea rows=2>" & txtFile.ReadLine() & "</textarea>" Call PrintInfo(txtFile) '讀取一行數據 Response.Write "<textarea rows=2>" & txtFile.ReadLine() & "</textarea>" Call PrintInfo(txtFile) '跳過一行數據
txtFile.SkipLine() '讀取剩余所有數據 Response.Write "<textarea rows=3>" &txtFile.ReadAll() & "</textarea>" Call PrintInfo(txtFile) '關閉并釋放 txtFile.Close Set fso = Nothing %>
運行結果如圖1-7所示。

圖1-7 各種數據讀取方法
3. 寫入數據的方法
寫入數據的方法有以下幾個:
?Write方法,將字符串寫入文件,參數是字符串。
?WriteLine方法,將字符串寫入文件,然后寫入行分隔符,如果省略參數,則只寫入行分隔符。
?WriteBlankLines方法,寫入指定個數的行分隔符。
這幾個方法都是在寫入或追加方式時才可以使用。
下例將演示各種數據寫入方法。
TextStreamWrite.asp
<%@codepage=936%> <%
Response.Charset = "GBK" '當前目錄下的TextStreamWriteTest.txt filePath = Server.MapPath(".") & "\TextStreamWriteTest.txt" Set fso = CreateObject("Scripting.FileSystemObject") '創建文本文件(覆蓋同名文件,使用Unicode編碼) Set txtFile = fso.CreateTextFile(filePath, True, True) '寫入數據 txtFile.Write("Hello W") txtFile.Write("orld.") '寫入一個行分隔符 txtFile.WriteLine() '寫入一行數據 txtFile.WriteLine("你好,世界。") '寫入兩個空行 txtFile.WriteBlankLines(2) '寫入數據 txtFile.Write("Over.") '關閉TextStream txtFile.Close() Set fso = Nothing %>
生成的文件內容如圖1-8所示。

圖1-8 各種數據寫入方法