Html 如何使用VBScript函数获取日志文件的最后三行内容
有谁能建议我使用VBscript函数来获取文本文档的最后3行(例如:log.txt)?下面是我的代码,它可以在我的屏幕上获取并显示整个日志,但我只想获取名为log.txt的日志文件的最后3行Html 如何使用VBScript函数获取日志文件的最后三行内容,html,vb.net,vbscript,hta,Html,Vb.net,Vbscript,Hta,有谁能建议我使用VBscript函数来获取文本文档的最后3行(例如:log.txt)?下面是我的代码,它可以在我的屏幕上获取并显示整个日志,但我只想获取名为log.txt的日志文件的最后3行 <script type="text/Vbscript"> Option Explicit Dim File File = "C:\\test.txt" '*********************************************************** Sub LoadMy
<script type="text/Vbscript">
Option Explicit
Dim File
File = "C:\\test.txt"
'***********************************************************
Sub LoadMyFile()
myDiv.innerHTML = LoadFile(File)
End Sub
'***********************************************************
Function LoadFile(File)
On Error Resume Next
Dim fso,F,ReadMe,Tab,i,paragraphe
Set fso = CreateObject("Scripting.FileSystemObject")
Set F = fso.OpenTextFile(File,1)
LoadFile = Err.Number
If Err.Number <> 0 Then
MsgBox Err.Description,16," Error"
Exit Function
End If
ReadMe = F.ReadAll
Tab = split(ReadMe,vbcrlf)
For i = lbound(Tab) to ubound(Tab)
paragraphe=paragraphe & Tab(i) & "<br>"
Next
LoadFile = paragraphe
End Function
</script>
选项显式
暗文件
File=“C:\\test.txt”
'***********************************************************
子LoadMyFile()
myDiv.innerHTML=LoadFile(文件)
端接头
'***********************************************************
函数加载文件(文件)
出错时继续下一步
尺寸fso,F,自述,制表符,i,段落
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set F=fso.OpenTextFile(文件,1)
LoadFile=Err.Number
如果错误号为0,则
MsgBox错误描述,16,“错误”
退出功能
如果结束
自述文件=F.ReadAll
Tab=拆分(自述,vbcrlf)
对于i=lbound(制表符)到ubound(制表符)
段落=段落和选项卡(i)和“
”
下一个
LoadFile=段落
端函数
代码不可用working@Steve
<html>
<script type="text/Vbscript">
Option Explicit
Dim File
File = "C:\\test.txt"
'***********************************************************
Sub LoadMyFile()
myDiv.innerHTML = LoadFile(File)
End Sub
************************************************************
Function CheckProcesses()
dim startLine
On Error Resume Next
Dim fso,F,ReadMe,Tab,i,paragraphe
Set fso = CreateObject("Scripting.FileSystemObject")
Set F = fso.OpenTextFile(File,1)
LoadFile = Err.Number
If Err.Number <> 0 Then
MsgBox Err.Description,16," Error"
Exit Function
End If
ReadMe = F.ReadAll
Tab = split(ReadMe,vbcrlf)
For i = lbound(Tab) to ubound(Tab)
paragraphe=paragraphe & Tab(i) & "<br>"
Next
if ubound(Tab) > 2 Then
startLine = ubound(Tab) - 2
else
startLine = 0
end if
For i = startLine to ubound(Tab)
paragraphe=paragraphe & Tab(i) & "<br>"
Next
LoadFile = paragraphe
End Function
</script>
<input type="button" name="Log" id="Start" value="Log Dctm" onclick="CheckProcesses()"></html>
选项显式
暗文件
File=“C:\\test.txt”
'***********************************************************
子LoadMyFile()
myDiv.innerHTML=LoadFile(文件)
端接头
************************************************************
函数检查进程()
暗惊星
出错时继续下一步
尺寸fso,F,自述,制表符,i,段落
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set F=fso.OpenTextFile(文件,1)
LoadFile=Err.Number
如果错误号为0,则
MsgBox错误描述,16,“错误”
退出功能
如果结束
自述文件=F.ReadAll
Tab=拆分(自述,vbcrlf)
对于i=lbound(制表符)到ubound(制表符)
段落=段落和选项卡(i)和“
”
下一个
如果ubound(Tab)>2,则
startLine=ubound(制表符)-2
其他的
斯达林=0
如果结束
对于i=从基线到ubound(制表符)
段落=段落和选项卡(i)和“
”
下一个
LoadFile=段落
端函数
谢谢和问候
Deb给定一个行数组(制表符),要显示的最后n行从UBound(制表符)-n+1开始,以UBound(制表符)结束。您应该测试“制表符中的行数是否少于n行”,以及“制表符的最后一行是否为空(尾随EOL)“。我无法测试这一点,但是如果您知道变量
Tab
的UBound
,那么最后三行是UBound(Tab)-2
,UBound(Tab)-1
和UBound(Tab)
对于i=ubound(Tab)-2到ubound(Tab)
段落=段落和选项卡(i)和“
”
下一个
当然,这要求您的日志文件中至少有3行,因此,在进入循环之前,可能需要进行一些检查
dim startLine
if ubound(Tab) > 2 Then
startLine = ubound(Tab) - 2
else
startLine = 0
end if
For i = startLine to ubound(Tab)
paragraphe=paragraphe & Tab(i) & "<br>"
Next
dim startine
如果ubound(Tab)>2,则
startLine=ubound(制表符)-2
其他的
斯达林=0
如果结束
对于i=从基线到ubound(制表符)
段落=段落和选项卡(i)和“
”
下一个
另一种解决方案可避免大文件内存耗尽:
filename = "C:\path\to\your.txt"
numlines = 3
Set fso = CreateObject("Scripting.FileSystemObject")
'create and initialize ring buffer
ReDim buf(numlines-1)
For n = 0 To UBound(buf)
buf(n) = Null
Next
i = 0
'read lines into ring buffer
Set f = fso.OpenTextFile(filename)
Do Until f.AtEndOfStream
buf(i) = f.ReadLine
i = (i+1) Mod numlines
Loop
f.Close
'output ringbuffer content (skip null values)
For n = 1 To numlines
If Not IsNull(buf(i)) Then WScript.Echo buf(i)
i = (i+1) Mod numlines
Next
数组buf
与索引变量i
和模运算一起用作包含从文件读取的最后一行(numlines
最多)的数组
在第二个循环(读取输入文件的循环)的末尾,索引i
指向包含从文件读取的最后一行的数组字段之后的数组字段,即缓冲区的开头
数组初始化中的
Null
值使输出例程“滑动”到第一个内容行(或缓冲区的末尾)如果从文件中读取的行数少于numlines
。输出循环中的变量n
只是一个计数器,因此从环形缓冲区读取numlines
元素时,从索引i
开始,到索引i-1
(模包装)结束。
您可以使用此功能:
函数ExtractLinesFromTextFile(ByRef TextFile、ByRef FromLine、ByRef ToLine)
选项显式
Dim标题、FromLine、ToLine、fso、Readfile、strBuff、InputFile、TotalNbLines
Title=“从文本文件中提取行©Hackoo 2014”
InputFile=“c:\test.txt”
设置fso=CreateObject(“Scripting.FileSystemObject”)
设置Readfile=Fso.OpenTextFile(InputFile,1)
strBuff=Readfile.ReadAll
TotalNbLines=Readfile.Line
Readfile.Close
MsgBox“此文件中的总行数”“&InputFile&”“=”&TotalNbLines,VbInformation,Title
'以提取最后3行
MsgBox ExtractLinesFromTextFile(InputFile,TotalNbLines-2,TotalNbLines),64,标题
'*********************************************************************************************************
公共函数ExtractLinesFromTextFile(ByRef TextFile,ByRef FromLine,ByRef ToLine)“请将UBound(tab-x)
更改为UBound(tab-x)
@Steve我试图对代码进行更改,但不起作用。我已粘贴更改后的代码(已更改的代码)在我上面的原始线程中,是否有我正在做的不正确的事情,敬请建议。对于n=1到numlines,不应该是对于n=I到numlines(我不是1)?@Ekkehard.Horner No.i
可以是环形缓冲区中的任何位置,具体取决于输入文件中的行数,因此我需要将缓冲区从i
输出到i-1
(模换行).n
只是一个计数器,用于确保缓冲区中的numlines
字段得到准确处理。我可以使用类似n=I:Do…loop Until=n
的循环,但我认为For
循环更容易理解。是的,我现在看到了(在您解释之后).@Ekkehard.Horner我对我的答案做了更多的解释。@Dojo_用户请务必阅读Meta Stack Exchange上的内容(及其答案)
filename = "C:\path\to\your.txt"
numlines = 3
Set fso = CreateObject("Scripting.FileSystemObject")
'create and initialize ring buffer
ReDim buf(numlines-1)
For n = 0 To UBound(buf)
buf(n) = Null
Next
i = 0
'read lines into ring buffer
Set f = fso.OpenTextFile(filename)
Do Until f.AtEndOfStream
buf(i) = f.ReadLine
i = (i+1) Mod numlines
Loop
f.Close
'output ringbuffer content (skip null values)
For n = 1 To numlines
If Not IsNull(buf(i)) Then WScript.Echo buf(i)
i = (i+1) Mod numlines
Next
Option Explicit
Dim Title,FromLine,ToLine,fso,Readfile,strBuff,InputFile,TotalNbLines
Title = "Extract Lines From TextFile © Hackoo 2014"
InputFile = "c:\test.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set Readfile = Fso.OpenTextFile(InputFile,1)
strBuff = Readfile.ReadAll
TotalNbLines = Readfile.Line
Readfile.Close
MsgBox "The total number of lines in this file """& InputFile &""" = "& TotalNbLines,VbInformation,Title
'To extract the 3 last lines
MsgBox ExtractLinesFromTextFile(InputFile,TotalNbLines - 2,TotalNbLines),64,Title
'*********************************************************************************************************
Public Function ExtractLinesFromTextFile(ByRef TextFile, ByRef FromLine, ByRef ToLine) '<-- Inclusive
Const TristateUseDefault = -2 'To Open the file using the system default.
On Error Resume Next
If FromLine <= ToLine Then
With CreateObject("Scripting.FileSystemObject").OpenTextFile(TextFile,1,true,TristateUseDefault)
If Err.number <> 0 Then
MsgBox err.description,16,err.description
Exit Function
Else
Do Until .Line = FromLine Or .AtEndOfStream
.SkipLine
Loop
Do Until .Line > ToLine Or .AtEndOfStream
ExtractLinesFromTextFile = ExtractLinesFromTextFile & (.ReadLine & vbNewLine)
Loop
End If
End With
Else
MsgBox "Error to Read Line in TextFile", vbCritical,"Error to Read Line in TextFile"
End If
End Function
'*********************************************************************************************************