VisualBasic Zieldatei auf doppelte Einträge prüfen

DenSe

Cadet 3rd Year
Registriert
Okt. 2016
Beiträge
35
Hallo,

ich bin gerade dabei, ein Programm zuschreiben, dass Log-Dateien einliest und bestimmte Zeilen daraus rauskopkiert.
Leider überschneiden sich die Log-Dateien, sodass einige Einträge doppelt vorkommen können.

Hier ist mein Code:

Code:
Dim reader As New StreamReader(opfad)
        Dim writer As New StreamWriter("C:\temp\KLA\alles_zusammen.txt", True)
        Dim zreader As New StreamReader("C:\temp\KLA\alles_zusammen.txt")
        Dim zzeile As String
        Dim i As Double = 0
        Do
            zeile = reader.ReadLine()
            If zeile IsNot Nothing Then
                datum = zeile.Substring(0, 10)
                uhrzeit = zeile.Substring(11, 8)
                code = zeile.Substring(20, 4)
                If (zeile.Contains("FindTerminalForRelease") Or zeile.Contains("Card number")) Then
                    nachricht = datum & " " & uhrzeit & " " & code & " - "
                    msg = Microsoft.VisualBasic.Mid(zeile, 28, 100)
                    Do
                        zzeile = zreader.ReadLine()
                        If zzeile <> nachricht & " " & msg Then
                            writer.WriteLine(nachricht & " " & msg)
                        End If
                    Loop
                End If
            End If
        Loop Until zeile Is Nothing
        writer.Close()

Leider habe ich gemerkt, dass ich keinen StreamWriter und Streamreader auf die selbe datei machen kann. Wie kann ich trotzdem die Zieldatei prüfen, ob der Wert schon vorhanden ist?

Vielen Dank für eure Hilfe

Gruß Denis:cool_alt:
 
Hi,
im Grunde macht es am meisten Sinn, die Datei, welche du auf deine doppelten Einträge prüfen willst, komplett im Speicher zu halten. Dass heißt: Erst komplett (List, Dictionary, etc)einlesen (und Datei wieder schließen), und damit dann auf schon vorhandene Einträge testen.Dann wieder mit StreamWriter Daten anhängen.
Falls die Dateien zu groß werden (was ich mir aktuell kaum vorstellen kann), evtl. eine Kopie der Datei erstellen und auf dieser arbeiten.
 
Habe das Prolem anders gelöst.
Danke.
Ergänzung ()

Ok müsste evtl. doch noch eure Hilfe in anspruch nehmen.
Habe das Problem jetzt so gelöst:
Code:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
                opfad = ofd.FileName
            End If
        Catch ex As Exception

        End Try

        Try
            If sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then
                spfad = sfd.FileName
            End If
        Catch ex As Exception

        End Try


        Dim reader As New StreamReader(opfad)
        Dim writer As New StreamWriter(spfad, True)
        Do
            zeile = reader.ReadLine()
            If zeile IsNot Nothing Then
                datum = zeile.Substring(0, 10)
                uhrzeit = zeile.Substring(11, 8)
                code = zeile.Substring(20, 4)
                If (zeile.Contains("FindTerminalForRelease") Or zeile.Contains("Card number")) Then
                    nachricht = datum & " " & uhrzeit & " " & code & " - "
                    msg = Microsoft.VisualBasic.Mid(zeile, 28, 100)
                    writer.WriteLine(nachricht & " " & msg)
                End If
            End If
        Loop Until zeile Is Nothing
        writer.Close()

        Shell("powershell -noexit $temp = get-content " & spfad & " | sort -unique" & vbCrLf & "$temp | out-file '" & spfad & "'")

        MsgBox("Text-Datei erfolgreich erstellt!")
    End Sub

Nun ist es so, wenn ich die zweite log-datei einlesen will, dann schreibt er folgendes in die txt-Datei:
〲㘱ㄭⴲ㜰ㄠ㨳㤰㌺‵㈷㌰ⴠ†慃摲渠浵敢㩲㈠㘰㠰㈷㈵㤰㔰਍〲㘱ㄭⴲ㜰ㄠ㨳㤰㌺‶㈶㠱ⴠ†敓癲捩㩥䘺
das ganze 3 Zeilen Lang
Wie kommt das zustande und wie behebe ich das?
 
Zurück
Oben