Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das TextFieldParser Objekt bietet eine Möglichkeit, strukturierte Textdateien wie Protokolle einfach und effizient zu analysieren. Sie können eine Datei mit mehreren Formaten verarbeiten, indem Sie die PeekChars
Methode verwenden, um das Format jeder Zeile zu bestimmen, während Sie die Datei analysieren.
So analysieren Sie eine Textdatei mit mehreren Formaten
Fügen Sie ihrem Projekt eine Textdatei mit dem Namen testfile.txt hinzu. Fügen Sie der Textdatei den folgenden Inhalt hinzu:
Err 1001 Cannot access resource. Err 2014 Resource not found. Acc 10/03/2009User1 Administrator. Err 0323 Warning: Invalid access attempt. Acc 10/03/2009User2 Standard user. Acc 10/04/2009User2 Standard user.
Definieren Sie das erwartete Format und das Format, das verwendet wird, wenn ein Fehler gemeldet wird. Der letzte Eintrag in jedem Array ist -1, daher wird angenommen, dass das letzte Feld eine variable Breite hat. Dies tritt auf, wenn der letzte Eintrag im Array kleiner oder gleich 0 ist.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Erstellen Sie ein neues TextFieldParser Objekt, das die Breite und das Format definiert.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
Durchlaufen Sie die Zeilen, indem Sie vor dem Lesen das Format testen.
Dim currentRow As String() While Not MyReader.EndOfData Try Dim rowType = MyReader.PeekChars(3) If String.Compare(rowType, "Err") = 0 Then ' If this line describes an error, the format of the row will be different. MyReader.SetFieldWidths(errorFormat) Else ' Otherwise parse the fields normally MyReader.SetFieldWidths(stdFormat) End If currentRow = MyReader.ReadFields For Each newString In currentRow Console.Write(newString & "|") Next Console.WriteLine()
Schreiben Sie Fehler auf die Konsole.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Beispiel
Im Folgenden finden Sie das vollständige Beispiel, das aus der Datei testfile.txt
gelesen wird:
Dim stdFormat As Integer() = {5, 10, 11, -1}
Dim errorFormat As Integer() = {5, 5, -1}
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = stdFormat
Dim currentRow As String()
While Not MyReader.EndOfData
Try
Dim rowType = MyReader.PeekChars(3)
If String.Compare(rowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
MyReader.SetFieldWidths(errorFormat)
Else
' Otherwise parse the fields normally
MyReader.SetFieldWidths(stdFormat)
End If
currentRow = MyReader.ReadFields
For Each newString In currentRow
Console.Write(newString & "|")
Next
Console.WriteLine()
Catch ex As FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
End While
End Using
Console.ReadLine()
Stabile Programmierung
Die folgenden Bedingungen können zu einer Ausnahme führen:
- Eine Zeile kann nicht mit dem angegebenen Format (MalformedLineException) analysiert werden. Die Ausnahmemeldung gibt die Zeile an, die die Ausnahme verursacht, während die ErrorLine Eigenschaft dem in der Zeile enthaltenen Text zugewiesen ist.
- Die angegebene Datei ist nicht vorhanden (FileNotFoundException).
- Eine teilweise vertrauenswürdige Situation, in der der Benutzer nicht über ausreichende Berechtigungen für den Zugriff auf die Datei verfügt. (SecurityException).
- Der Pfad ist zu lang (PathTooLongException).
- Der Benutzer verfügt nicht über ausreichende Berechtigungen für den Zugriff auf die Datei (UnauthorizedAccessException).