用vbs讀取文本文件的最后一行
更新時間:2007年03月25日 00:00:00 作者:
問:
您好,腳本專家!如何僅讀取文本文件的最后一行?
-- BM
答:
您好,BM。如果您曾經(jīng)想知道您好,腳本專家!與其它每日專欄(比如,知心姐姐)的不同之處,那么,下面是一種途徑。假設(shè)有人在給知心姐姐的信中說:
知心姐姐:
我的生活一團(tuán)糟,我需要采取一些措施來應(yīng)對。我如何能扭轉(zhuǎn)我的生活并且重新快樂起來?
絕望之人于代頓
知心姐姐絕不會給絕望之人這樣的答復(fù):
親愛的絕望之人:
唉,您的生活不能變好了。很抱歉。
那么,您認(rèn)為腳本專家會如何答復(fù)您關(guān)于讀取文本文件的最后一行呢?答對了:
親愛的 BM:
唉,您不能。很抱歉。
不過,請等一下,先不要走。的確,知心姐姐絕不會說,“您知道,Desperate,要使您快樂起來我無能為力。但是這有一個辦法可以使您看起來是快樂的?!比欢_本專家卻沒有這樣的疑慮。換句話說,我們無法為您提供僅讀取文本文件最后一行的腳本。但是以下腳本可以看起來僅讀取文本文件的最后一行:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Loop
objFile.Close
Wscript.Echo strLine
我們此處遇到的問題是 FileSystemObject(用于處理文本文件的腳本對象)只知道一個方向:向前。它必須從文件開頭開始,而且只能繼續(xù)向文件的末尾運(yùn)行。您無法指定其他起始位置且無法反向讀?。磸哪┪驳介_頭)。實(shí)際上,您甚至無法重新讀取文件:除非關(guān)閉然后再重新打開該文件,否則到達(dá)文件末尾后您無法重新讀取該文件。這就是為什么涉及到文本文件時,教程的解決方法幾乎都是一樣的。
此處的解決方法是,我們實(shí)際上確實(shí)從頭至尾讀取整個文本文件。然而,我們只跟蹤所讀取的最后一行。讀到文件的末尾時,我們將得到一個變量,它包含所讀取的最后一行的值;它同時也是文件的最后一行。回顯該變量的值時,看起來好像我們只讀取了最后一行(尤其是沒有其他東西要處理的時候,F(xiàn)ileSystemObject 的速度非常快)。我們沒有 - 我們實(shí)際上讀取了整個文件 - 但是沒有人會知道。這將是我們的小秘密。
至于代碼本身,我們首先定義名為 ForReading 的常量并將其值設(shè)為 1;我們將使用該常量告訴 FileSystemObject 我們要打開待讀取的文本文件。然后,我們創(chuàng)建 Scripting.FileSystemObject 的一個實(shí)例,并且使用 OpenTextFile 方法打開文件 C:\Scripts\Test.txt。接下來是下面這個代碼塊:
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Loop
此處我們要做的只是逐行讀取文件,直到文件的末尾(即讀到文件流末尾)。每次讀取某行時,我們用剛讀取的文本替換變量 strLine 的值。例如,假設(shè)文本文件包含三行:
A
C
在我們的循環(huán)中讀取行 1,因此將值 A 賦給 strLine。在下一個循環(huán)中讀取第二行,這意味著將值 B 賦給 strLine。再循環(huán)一次并且將值 C 賦給 strLine。因?yàn)槲覀円训竭_(dá)文件末尾,故 strLine 保持值 C,該值恰好為文件的最后一行。然后關(guān)閉文件并回顯 strLine 的值。所有人只知道我們所做的是讀取 - 返回 - 文件最后一行的值。
是的,很隱秘。
不可否認(rèn),此腳本存在一個潛在的問題。假設(shè)文件末尾添加了幾行空白行。腳本將忠實(shí)地返回空(空值)作為文本文件的最后一行。這就是它應(yīng)該做的:畢竟,文件的最后一行是空白。但是假設(shè)這是某種類型的日志文件,出于某種原因,創(chuàng)建此日志的應(yīng)用程序總是將空白行放到文件末尾。在這種情況下,可能您真正感興趣的是文件中最后的非空白行。下面是修改后的腳本,它使用 Len 函數(shù)檢查所讀取的每行的長度。如果長度等于 0,則意味著此行為空白行,便不在變量 strLine 中存儲該值:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
Do Until objFile.AtEndOfStream
strNextLine = objFile.ReadLine
If Len(strNextLine) > 0 Then
strLine = strNextLine
End If
Loop
objFile.Close
Wscript.Echo strLine
羨慕吧,知心姐姐!
您好,腳本專家!如何僅讀取文本文件的最后一行?
-- BM
答:
您好,BM。如果您曾經(jīng)想知道您好,腳本專家!與其它每日專欄(比如,知心姐姐)的不同之處,那么,下面是一種途徑。假設(shè)有人在給知心姐姐的信中說:
知心姐姐:
我的生活一團(tuán)糟,我需要采取一些措施來應(yīng)對。我如何能扭轉(zhuǎn)我的生活并且重新快樂起來?
絕望之人于代頓
知心姐姐絕不會給絕望之人這樣的答復(fù):
親愛的絕望之人:
唉,您的生活不能變好了。很抱歉。
那么,您認(rèn)為腳本專家會如何答復(fù)您關(guān)于讀取文本文件的最后一行呢?答對了:
親愛的 BM:
唉,您不能。很抱歉。
不過,請等一下,先不要走。的確,知心姐姐絕不會說,“您知道,Desperate,要使您快樂起來我無能為力。但是這有一個辦法可以使您看起來是快樂的?!比欢_本專家卻沒有這樣的疑慮。換句話說,我們無法為您提供僅讀取文本文件最后一行的腳本。但是以下腳本可以看起來僅讀取文本文件的最后一行:
復(fù)制代碼 代碼如下:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Loop
objFile.Close
Wscript.Echo strLine
我們此處遇到的問題是 FileSystemObject(用于處理文本文件的腳本對象)只知道一個方向:向前。它必須從文件開頭開始,而且只能繼續(xù)向文件的末尾運(yùn)行。您無法指定其他起始位置且無法反向讀?。磸哪┪驳介_頭)。實(shí)際上,您甚至無法重新讀取文件:除非關(guān)閉然后再重新打開該文件,否則到達(dá)文件末尾后您無法重新讀取該文件。這就是為什么涉及到文本文件時,教程的解決方法幾乎都是一樣的。
此處的解決方法是,我們實(shí)際上確實(shí)從頭至尾讀取整個文本文件。然而,我們只跟蹤所讀取的最后一行。讀到文件的末尾時,我們將得到一個變量,它包含所讀取的最后一行的值;它同時也是文件的最后一行。回顯該變量的值時,看起來好像我們只讀取了最后一行(尤其是沒有其他東西要處理的時候,F(xiàn)ileSystemObject 的速度非常快)。我們沒有 - 我們實(shí)際上讀取了整個文件 - 但是沒有人會知道。這將是我們的小秘密。
至于代碼本身,我們首先定義名為 ForReading 的常量并將其值設(shè)為 1;我們將使用該常量告訴 FileSystemObject 我們要打開待讀取的文本文件。然后,我們創(chuàng)建 Scripting.FileSystemObject 的一個實(shí)例,并且使用 OpenTextFile 方法打開文件 C:\Scripts\Test.txt。接下來是下面這個代碼塊:
復(fù)制代碼 代碼如下:
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Loop
此處我們要做的只是逐行讀取文件,直到文件的末尾(即讀到文件流末尾)。每次讀取某行時,我們用剛讀取的文本替換變量 strLine 的值。例如,假設(shè)文本文件包含三行:
A
C
在我們的循環(huán)中讀取行 1,因此將值 A 賦給 strLine。在下一個循環(huán)中讀取第二行,這意味著將值 B 賦給 strLine。再循環(huán)一次并且將值 C 賦給 strLine。因?yàn)槲覀円训竭_(dá)文件末尾,故 strLine 保持值 C,該值恰好為文件的最后一行。然后關(guān)閉文件并回顯 strLine 的值。所有人只知道我們所做的是讀取 - 返回 - 文件最后一行的值。
是的,很隱秘。
不可否認(rèn),此腳本存在一個潛在的問題。假設(shè)文件末尾添加了幾行空白行。腳本將忠實(shí)地返回空(空值)作為文本文件的最后一行。這就是它應(yīng)該做的:畢竟,文件的最后一行是空白。但是假設(shè)這是某種類型的日志文件,出于某種原因,創(chuàng)建此日志的應(yīng)用程序總是將空白行放到文件末尾。在這種情況下,可能您真正感興趣的是文件中最后的非空白行。下面是修改后的腳本,它使用 Len 函數(shù)檢查所讀取的每行的長度。如果長度等于 0,則意味著此行為空白行,便不在變量 strLine 中存儲該值:
復(fù)制代碼 代碼如下:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
Do Until objFile.AtEndOfStream
strNextLine = objFile.ReadLine
If Len(strNextLine) > 0 Then
strLine = strNextLine
End If
Loop
objFile.Close
Wscript.Echo strLine
相關(guān)文章
VBS教程:VBscript語句-ExecuteGlobal 語句
VBS教程:VBscript語句-ExecuteGlobal 語句...2006-11-11vbscript獲取文件的創(chuàng)建時間、最后修改時間和最后訪問時間的方法
這篇文章主要介紹了vbscript獲取文件的創(chuàng)建時間、最后修改時間和最后訪問時間的方法,本文通過FileSystemObject對象實(shí)現(xiàn),需要的朋友可以參考下2014-08-08WINDOWS腳本實(shí)踐:為SAP補(bǔ)丁制作的VBS腳本代碼
WINDOWS腳本實(shí)踐:為SAP補(bǔ)丁制作的VBS腳本代碼...2007-03-03防止網(wǎng)頁腳本病毒執(zhí)行的方法-from web
防止網(wǎng)頁腳本病毒執(zhí)行的方法-from web...2007-02-02ie7 0day當(dāng)中的shellcode的escape+xor21加密
shellcode的escape+xor21加密2008-12-12Vbs備份指定文件到指定目錄并且以日期重命名的實(shí)現(xiàn)代碼
這篇文章主要介紹了Vbs備份指定文件到指定目錄并且以日期重命名的實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-09-09vbs ShellExecute運(yùn)行外部程序時如何判斷外部程序執(zhí)行成功與否
這篇文章主要介紹了vbs ShellExecute運(yùn)行外部程序時如何判斷外部程序執(zhí)行成功與否,需要的朋友可以參考下2023-06-06