VisualBasic Komische Ausgabe beim 2. Programmdurchlauf

DenSe

Cadet 3rd Year
Registriert
Okt. 2016
Beiträge
35
Hallo,
ich habe ein Programm geschrieben, dass Log-Dateien einliest und bestimmte Zeilen daraus rauskopkiert.
Leider überschneiden sich die Log-Dateien, sodass einige Einträge doppelt vorkommen können.

Die Überprüfung auf die Doppelten Einträge in der Zieldatei habe ich mithilfe eines Powershellaufrufs innerhalb des Programms gelöst.

Beim Ersten einlesen einer Log-Datei klappt alles wunderbar.
Das Problem ist der 2. Durchlauf! Die Ausgabe in die Zieldatei sieht wiefolgt aus:

〲㘱ㄭⴲ㜰ㄠ㨳㤰㌺‵㈷㌰ⴠ†慃摲渠浵敢㩲㈠㘰㠰㈷㈵㤰� �਍〲㘱ㄭⴲ㜰ㄠ㨳㤰㌺‶㈶㠱ⴠ†敓癲捩㩥䘺

Hier ist mein Programm:

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

Ich weiß nicht wann der Fehler passiert und warum die Zeichen ausgegeben werden.

Vielen Dank für eure Hilfe


Viele Grüße D

DenSe
 
Wie sollte es denn richtig aussehen?

Tippe auf ein Encoding oder Locale Problem. Versuche mal, UTF-8 zu erwingen, irgendwie kannst Du das bei den Readern und Writern setzen (sollte man eh immer machen, dann kann so ein Zeichenwirrwarr erst gar nicht entstehen).
 
Zuletzt bearbeitet:
also eigentlich soll es so aussehen:
2016-12-07 13:09:35 7203 - Card number: 2060872520905
2016-12-07 13:09:36 6218 - Service::FindTerminalForRelease result: Success
2016-12-07 13:12:38 3578 - Card number: 2060872520905
2016-12-07 13:12:39 2843 - Service::FindTerminalForRelease result: Success
2016-12-07 13:13:29 2859 - Card number: 2060872520929
und das immer so weiter, da ja mehrere hundert Einträge dieser Art in einer Log-Datei sind.

Das Schlimme ist ja, wenn ich den Powershell-Befehl weg lasse im Code und die Zieldatei anschließend händisch mit der Powershell auf doppelte Einträge prüfe, funktioniert es.

Gruß DenSe

P.S. ich habe die Deklaration des Reader und des Writers jetzt so umgeschrieben:
Code:
Dim reader As New StreamReader(opfad, System.Text.Encoding.UTF8)
        Dim writer As New StreamWriter(spfad, True, System.Text.Encoding.UTF8)

Aber es passiert immer noch der gleiche Fehler mit den Zeichen.
 
Zuletzt bearbeitet:
Die UTF-8 Codierung musst Du durchgängig überall angeben, beim Reader, beim Writer, bei der Shell, schlicht überall da, wo Du Daten liest, schreibst, verarbeitest usw.

Edit: Wenn Du ein kaputtest File mit z.B. Notepad++ öffnest, was wird dann als Codierung angezeigt? Ich tippe, da steht dann was von LittleEndian oder so...
 
Zuletzt bearbeitet:
Zurück
Oben