试图解析日志文件并获取状态信息

时间:2017-12-11 12:24:03

标签: vb.net parsing logging text-files

我尝试使用vb.net

编写一些日志文件报告

我有一个文本文件给出这样的东西。第一行是第二行发生的日期。字母代表例如用户名和该用户所处的州的号码(许可证签入/签出)。第3行是一些不容忽视的消息

解决方案应该告诉我哪些信件处于状态" 1"

2017年1月2日

A 1

一些消息

2017年3月2日

B 0

一些消息

2017年3月2日

C 1

一些消息

2017年6月12日

D 1

一些消息

2017年6月12日

A 0

一些消息

2017年6月12日

B 1

一些消息

2017年6月12日

A 1

一些消息

2017年6月12日

C 0

一些消息

这是我试图做的事情:

    Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("pathtologfile.log")
        MyReader.TextFieldType = FileIO.FieldType.Delimited
        Dim currentRow As String
        While Not MyReader.EndOfData
            Try
                currentRow = MyReader.ReadLine

'这是我今天日期的过滤器

                If currentRow Like ("*" & stringdate & "*") Then
                    timestamp = currentRow
                    'nächste Zeile
                    i = i + 1

'计算行数以查看日期和"真实"之间的差异1

                ElseIf currentRow Like "*1*" And i >= 2 Then
                    OutputTxT.AppendText(timestamp & " " & currentRow & (vbNewLine) & (vbNewLine))
                    'wenn in Zeile 2 dann +1 ansonsten zurück auf 1
                    If i <= 3 Then
                        i = i + 1
                    Else
                        i = 1
                    End If
                End If
            Catch ex As Microsoft.VisualBasic.
              FileIO.MalformedLineException
                MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
            End Try
        End While
    End Using

所以你看到这个解决方案,我只得到在特定日期发生的1#。我喜欢只有当前信件1。 我希望这是可以理解的:) 如果你能给我一个关于如何处理这样的事情的暗示会很好:)

BEst问候 哈德

1 个答案:

答案 0 :(得分:0)

好!一个小循环怎么样?我创建了一个类,所以我可以将值存储在一个简单的List(Of T)中。

Public Class FileReading
    Private Sub ReadFile()
        Dim MyList As New List(Of LogHappening)
        ' Create an instance of StreamReader to read from a file.
        Dim sr As StreamReader = New StreamReader("C:\Users\maryo\Desktop\testlog.txt")
        Dim line1 As String
        Dim line2 As String
        Dim line3 As String
        Do While sr.Peek() >= 0 'Returns -1 if no more characters in file
            line1 = sr.ReadLine() 'Date
            line2 = sr.ReadLine() 'Letter & Number
            If line2.Trim.EndsWith("1") Then
                Dim initial As String = line2.Trim.Substring(0, 1)
                line3 = sr.ReadLine() 'message
                Dim Happening As New LogHappening(line1, initial, 1, line3)
                MyList.Add(Happening)
            Else
                line3 = sr.ReadLine()
            End If
        Loop
        sr.Close()
        For Each item In MyList
            Debug.Print($"{item.MyDate}, {item.Initial}, {item.Number}, {item.Message}")
        Next
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ReadFile()
    End Sub
End Class


Public Class LogHappening
    Public Sub New()

    End Sub
    Public Sub New(dteDate As String, strInitial As String, intNumber As Integer, strMessage As String)
        MyDate = dteDate
        Initial = strInitial
        Number = intNumber
        Message = strMessage
    End Sub

    Private _Date As String
    Public Property MyDate As String
        Get
            Return _Date
        End Get
        Set(value As String)
            _Date = value
        End Set
    End Property

    Private _Initial As String
    Public Property Initial As String
        Get
            Return _Initial
        End Get
        Set(value As String)
            _Initial = value
        End Set
    End Property

    Private _Number As Integer
    Public Property Number As Integer
        Get
            Return _Number
        End Get
        Set(value As Integer)
            _Number = value
        End Set
    End Property

    Private _Message As String
    Public Property Message As String
        Get
            Return _Message
        End Get
        Set(value As String)
            _Message = value
        End Set
    End Property
End Class