ファイル B (潜在的に悪い) の内容をファイル A (既知の正常) に対して検証し、潜在的に悪いファイルから既知の各行を削除し、潜在的に悪い行のみを残すプログラムを作成しようとしています。私が抱えている問題は、各行にタイムスタンプが含まれていることです。タイムスタンプの後に始まる行の内容を確認するにはどうすればよいですか?
IE ファイル A:
MSI (c) (74:80) [08:09:43:718]: Resetting cached policy values
MSI (c) (74:80) [08:09:43:718]: Machine policy value 'Debug' is 0
MSI (c) (74:80) [08:09:43:718]: ******* RunEngine:
対ファイル B:
MSI (c) (E8:DC) [18:35:18:573]: Resetting cached policy values
MSI (c) (E8:DC) [18:35:18:573]: Machine policy value 'Debug' is 0
MSI (c) (E8:DC) [18:35:18:573]: ******* RunEngine:
これらはすべて等しいと見なす必要があります。違いの例はありませんが、基本的には、これらが削除された後に残るものになります。
これまでの私のコード:
Public Class Form1
Dim compto As New List(Of String)
Dim compfrom As New List(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Standard("filea.LOG")
Readfile("fileb.LOG")
Writefile("difference.txt")
End Sub
Public Sub Standard(ByVal Path As String)
Using r As StreamReader = New StreamReader(Path)
Dim line As String = Nothing
line = r.ReadLine
Do While (Not line Is Nothing)
line = r.ReadLine
If Not compto.Contains(line) Then compto.Add(line)
Loop
End Using
End Sub
Public Sub Readfile(ByVal Path As String)
Dim pattern As String = "{30}([A-Za-z0-9\-]+"
Using r As StreamReader = New StreamReader(Path)
Dim line As String = Nothing
line = r.ReadLine
Do While (Not line Is Nothing)
line = r.ReadLine
If Not compto.Contains(line) Then compfrom.Add(line)
Loop
End Using
End Sub
Public Sub Writefile(ByVal Path As String)
Using sw As StreamWriter = New StreamWriter(Path)
For Each line As String In compfrom
sw.WriteLine(line)
ListBox1.Items.Add(line)
Next
End Using
End Sub
End Class
これまでのところ、このコードは完全一致を削除しますが、それが私が立ち往生している場所です。どんな助けでも素晴らしいでしょう。
ありがとう。
ソリューション編集:
Public Sub Writefile(ByVal Path As String)
Dim GetLine As Func(Of String, String) = Function(line) Regex.Match(line, "\]: (.*)").Groups(1).Value
Dim Diff As New HashSet(Of String)(File.ReadLines("filea.log").Select(GetLine))
Diff.SymmetricExceptWith(File.ReadLines("fileb.log").Select(GetLine))
Using sw As StreamWriter = New StreamWriter(Path)
For Each line As String In Diff
sw.WriteLine(String.Join("", line))
ListBox1.Items.Add(String.Join("", line))
Next
End Using
End Sub