我尝试使用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问候 哈德
答案 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