官术网_书友最值得收藏!

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 各種數據寫入方法

主站蜘蛛池模板: 竹山县| 清远市| 礼泉县| 尖扎县| 宁晋县| 平和县| 洛川县| 康保县| 南京市| 桓台县| 江安县| 夏邑县| 萨嘎县| 永兴县| 丹凤县| 荣昌县| 荣成市| 南平市| 唐海县| 台南县| 西安市| 北碚区| 克东县| 顺义区| 邮箱| 岳普湖县| 庄浪县| 绍兴市| 满洲里市| 西安市| 秦皇岛市| 富宁县| 石棉县| 南昌市| 古交市| 淮滨县| 北宁市| 肃北| 确山县| 扶绥县| 禹城市|