Html 如何使用VBScript函数获取日志文件的最后三行内容

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

有谁能建议我使用VBscript函数来获取文本文档的最后3行(例如:log.txt)?下面是我的代码,它可以在我的屏幕上获取并显示整个日志,但我只想获取名为log.txt的日志文件的最后3行

<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
'*********************************************************************************************************