用vbscript實現從後到前閱讀乙個文字檔案

2022-09-21 22:45:16 字數 1612 閱讀 9118

問:

嗨,scripting guy!我有乙個日誌檔案,新的資料總是被新增到檔案的底部;也就是說最近的條目總是位於檔案的末尾處。我想從最後一行開始讀取內容,直到檔案的第一行,但是我不知道怎樣實現。

-- mb, milwaukee, wi

答: 您好,mb.filesystemobject 非常有用,但是它也具有它自己的一些限制;主要限制之一便是它只能從前向後讀取檔案內容。和 tail 工具不同,您不能要求 filesystemobject 從後向前讀取檔案。(好,我們假定您要求這麼做,但是它肯定無法為您實現。)

但是,沒有關係,正如使用指令碼做其他事情一樣,您總能找到乙個辦法衝破這種限制的束縛。在這種情況下,我們所做的就是繼續向前,從前向後讀取檔案,從第一行還是,到最後一行結束。但是,和立即將這些行顯示在螢幕上不同,我們將它們儲存在乙個陣列裡,檔案中的每一行代表陣列中的乙個元素。

我們為什麼要這樣做?好,現在我們有了乙個下面這樣的陣列,儲存了文字檔案中的資訊:

violet

indigo

blue

green

yellow

orange

red

不可否認的是,我們現在所做的就像重新發明輪子一樣。不過,文字檔案和陣列之間有乙個重要的不同之處: 從後向前讀取陣列非常容易。我們將要指令碼從陣列中的最後乙個專案開始(我們可以使用 ubound 函式來確定)並且從後向前讀取到陣列的第乙個專案(lbound)。

在我們的示例陣列中,有 7 個專案;最後程式設計客棧乙個專案(ubound)是單詞 red,第乙個專案(lbound)是單詞 violet。陣列中的第乙個專案的下標為 0;所以 violet 的下標為 0,red 的下標為 6。我們的指令碼將從專案 6 開始向前到專案 0 為止。那怎樣實現呢?我們將引數 step 設為 -1,也就表示,「找到專案 6 ,然後對它做點什麼;然後將下標減 1,得到 5。在找到專案 5 ,再對它做點什麼。重複這個過程,直到處理完了陣列中的所有專案。」

具體的實現**如下所示:

dim arrfilelines()

i = 0

set objfso = createobject("scripting.filesystemobject")

set objfile&nbywhiisp;= objfso.openteywhiixtfile("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)

n程式設計客棧ext

如果您沒有使用過陣列,可能看起來有點糊塗,但是在熟悉了它之後,便會發現它實際上很簡單。

好,我們從後向前讀取檔案的輸出結果如下所示:

red orange yellow green blue indigo violet

用遞迴實現從1 2 3 10

public static void main string args 用遞迴實現從1 2 3 10 public static int sum int n else public static void main string args 遞迴實現a a 1 a 2 b 其中a b均為不小於1的整數...

用vbscript實現將指令碼的輸出複製到剪貼簿

問 嗨,scripting guy!有辦法將指令碼輸出複製到剪貼簿嗎?zw,marseilles,france 答 您好,zw.如果您不介意用一些瘋狂的解決方法,那麼實際上將指令碼輸出複製到剪貼簿相當容易。首先,您需要構造乙個字串,其中包含想要的輸出。然後,建立 internet explorer ...

用陣列實現從檔案搜尋帳戶和驗證密碼

最近乙個同學在寫個銀行管理系統,然後問我怎麼從檔案搜尋帳戶,給了方法後又不懂檔案裡面的密碼怎麼與輸入的匹配。一般來說,高效的做法是用鍊錶實現。用陣列實現不是高效的方法,而且浪費空間。再者,對於賬戶類有個人資訊集合的,一般用結構體,寫起來也方便簡單。但是他卻用陣列來做,而且沒有用結構體。對於這種情況下...