用vbscript實(shí)現(xiàn)從后到前閱讀一個(gè)文本文件
更新時(shí)間:2007年04月07日 00:00:00 作者:
問(wèn):
嗨,Scripting Guy!我有一個(gè)日志文件,新的數(shù)據(jù)總是被添加到文件的底部;也就是說(shuō)最近的條目總是位于文件的末尾處。我想從最后一行開(kāi)始讀取內(nèi)容,直到文件的第一行,但是我不知道怎樣實(shí)現(xiàn)。
-- MB, Milwaukee, WI
答:
您好,MB.FileSystemObject 非常有用,但是它也具有它自己的一些限制;主要限制之一便是它只能從前向后讀取文件內(nèi)容。和 Tail 工具不同,您不能要求 FileSystemObject 從后向前讀取文件。(好,我們假定您要求這么做,但是它肯定無(wú)法為您實(shí)現(xiàn)。)
但是,沒(méi)有關(guān)系,正如使用腳本做其他事情一樣,您總能找到一個(gè)辦法沖破這種限制的束縛。在這種情況下,我們所做的就是繼續(xù)向前,從前向后讀取文件,從第一行還是,到最后一行結(jié)束。但是,和立即將這些行顯示在屏幕上不同,我們將它們保存在一個(gè)數(shù)組里,文件中的每一行代表數(shù)組中的一個(gè)元素。
我們?yōu)槭裁匆@樣做?好,現(xiàn)在我們有了一個(gè)下面這樣的數(shù)組,保存了文本文件中的信息:
violet
indigo
blue
green
yellow
orange
red
不可否認(rèn)的是,我們現(xiàn)在所做的就像重新發(fā)明輪子一樣。不過(guò),文本文件和數(shù)組之間有一個(gè)重要的不同之處: 從后向前讀取數(shù)組非常容易。我們將要腳本從數(shù)組中的最后一個(gè)項(xiàng)目開(kāi)始(我們可以使用 Ubound 函數(shù)來(lái)確定)并且從后向前讀取到數(shù)組的第一個(gè)項(xiàng)目(Lbound)。
在我們的示例數(shù)組中,有 7 個(gè)項(xiàng)目;最后一個(gè)項(xiàng)目(Ubound)是單詞 red,第一個(gè)項(xiàng)目(Lbound)是單詞 violet。數(shù)組中的第一個(gè)項(xiàng)目的下標(biāo)為 0;所以 violet 的下標(biāo)為 0,red 的下標(biāo)為 6。我們的腳本將從項(xiàng)目 6 開(kāi)始向前到項(xiàng)目 0 為止。那怎樣實(shí)現(xiàn)呢?我們將參數(shù) Step 設(shè)為 -1,也就表示,“找到項(xiàng)目 6 ,然后對(duì)它做點(diǎn)什么;然后將下標(biāo)減 1,得到 5。在找到項(xiàng)目 5 ,再對(duì)它做點(diǎn)什么。重復(fù)這個(gè)過(guò)程,直到處理完了數(shù)組中的所有項(xiàng)目。”
具體的實(shí)現(xiàn)代碼如下所示:
Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\FSO\ScriptLog.txt", 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
Wscript.Echo arrFileLines(l)
Next
如果您沒(méi)有使用過(guò)數(shù)組,可能看起來(lái)有點(diǎn)糊涂,但是在熟悉了它之后,便會(huì)發(fā)現(xiàn)它實(shí)際上很簡(jiǎn)單。
好,我們從后向前讀取文件的輸出結(jié)果如下所示:
red orange yellow green blue indigo violet
有關(guān)數(shù)組使用的更多信息,請(qǐng)參閱Microsoft Windows 2000 腳本編寫(xiě)指南.
嗨,Scripting Guy!我有一個(gè)日志文件,新的數(shù)據(jù)總是被添加到文件的底部;也就是說(shuō)最近的條目總是位于文件的末尾處。我想從最后一行開(kāi)始讀取內(nèi)容,直到文件的第一行,但是我不知道怎樣實(shí)現(xiàn)。
-- MB, Milwaukee, WI
答:
您好,MB.FileSystemObject 非常有用,但是它也具有它自己的一些限制;主要限制之一便是它只能從前向后讀取文件內(nèi)容。和 Tail 工具不同,您不能要求 FileSystemObject 從后向前讀取文件。(好,我們假定您要求這么做,但是它肯定無(wú)法為您實(shí)現(xiàn)。)
但是,沒(méi)有關(guān)系,正如使用腳本做其他事情一樣,您總能找到一個(gè)辦法沖破這種限制的束縛。在這種情況下,我們所做的就是繼續(xù)向前,從前向后讀取文件,從第一行還是,到最后一行結(jié)束。但是,和立即將這些行顯示在屏幕上不同,我們將它們保存在一個(gè)數(shù)組里,文件中的每一行代表數(shù)組中的一個(gè)元素。
我們?yōu)槭裁匆@樣做?好,現(xiàn)在我們有了一個(gè)下面這樣的數(shù)組,保存了文本文件中的信息:
violet
indigo
blue
green
yellow
orange
red
不可否認(rèn)的是,我們現(xiàn)在所做的就像重新發(fā)明輪子一樣。不過(guò),文本文件和數(shù)組之間有一個(gè)重要的不同之處: 從后向前讀取數(shù)組非常容易。我們將要腳本從數(shù)組中的最后一個(gè)項(xiàng)目開(kāi)始(我們可以使用 Ubound 函數(shù)來(lái)確定)并且從后向前讀取到數(shù)組的第一個(gè)項(xiàng)目(Lbound)。
在我們的示例數(shù)組中,有 7 個(gè)項(xiàng)目;最后一個(gè)項(xiàng)目(Ubound)是單詞 red,第一個(gè)項(xiàng)目(Lbound)是單詞 violet。數(shù)組中的第一個(gè)項(xiàng)目的下標(biāo)為 0;所以 violet 的下標(biāo)為 0,red 的下標(biāo)為 6。我們的腳本將從項(xiàng)目 6 開(kāi)始向前到項(xiàng)目 0 為止。那怎樣實(shí)現(xiàn)呢?我們將參數(shù) Step 設(shè)為 -1,也就表示,“找到項(xiàng)目 6 ,然后對(duì)它做點(diǎn)什么;然后將下標(biāo)減 1,得到 5。在找到項(xiàng)目 5 ,再對(duì)它做點(diǎn)什么。重復(fù)這個(gè)過(guò)程,直到處理完了數(shù)組中的所有項(xiàng)目。”
具體的實(shí)現(xiàn)代碼如下所示:
Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\FSO\ScriptLog.txt", 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
Wscript.Echo arrFileLines(l)
Next
如果您沒(méi)有使用過(guò)數(shù)組,可能看起來(lái)有點(diǎn)糊涂,但是在熟悉了它之后,便會(huì)發(fā)現(xiàn)它實(shí)際上很簡(jiǎn)單。
好,我們從后向前讀取文件的輸出結(jié)果如下所示:
red orange yellow green blue indigo violet
有關(guān)數(shù)組使用的更多信息,請(qǐng)參閱Microsoft Windows 2000 腳本編寫(xiě)指南.
相關(guān)文章
使用 iisext.vbs 禁用 Web 服務(wù)擴(kuò)展的方法
這篇文章主要介紹了如何使用 iisext.vbs 在本地或遠(yuǎn)程計(jì)算機(jī)上禁用 Web 服務(wù)擴(kuò)展,需要的朋友可以參考下2014-07-07VBS基礎(chǔ)篇 - vbscript Dictionary對(duì)象
Dictionary是存儲(chǔ)數(shù)據(jù)鍵和項(xiàng)目對(duì)的對(duì)象,其主要屬性有Count、Item、Key,主要方法有Add、Exists、Items、Keys、Remove、RemoveAll2018-05-05vbscript基礎(chǔ)篇 - vbs變量定義與使用方法
VBScript只有一種數(shù)據(jù)類(lèi)型 —— Variant,它是根據(jù)上下文來(lái)判斷是數(shù)字還是字符串。因?yàn)閂ariant是VBScript中唯一的數(shù)據(jù)類(lèi)型,所以它也是VBScript中所有函數(shù)的返回值的數(shù)據(jù)類(lèi)型2018-05-05