Gewusst wie: Lesen aus Textdateien mit mehreren Formaten in Visual Basic
Mit dem TextFieldParser-Objekt können strukturierte Textdateien, z. B. Protokolle, leicht und effizient analysiert werden. Sie können eine Datei mit mehreren Formaten mithilfe der PeekChars-Methode verarbeiten, um das Format der jeweiligen Zeile zu bestimmen, während Sie die Datei analysieren.
So lesen Sie aus einer Textdatei mit mehreren Formaten
Fügen Sie dem Projekt eine Textdatei mit dem Namen "testfile.txt" hinzu. Fügen Sie der Textdatei 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 für das Erfassen eines Fehlers verwendete Format. Der letzte Eintrag in jedem Array lautet "-1", daher wird für das letzte Feld eine variable Breite angenommen. Dies ist der Fall, wenn der letzte Eintrag im Array kleiner oder gleich 0 (null) ist.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Erstellen Sie ein neues TextFieldParser-Objekt, und definieren Sie Breite und Format.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
Durchlaufen Sie die Zeilen, und testen Sie das Format vor dem Lesen.
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()
Geben Sie Fehler auf der Konsole aus.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Beispiel
Im Folgenden ist ein vollständiges Beispiel aus der Datei testfile.txt aufgeführt.
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()
Robuste Programmierung
Unter den folgenden Bedingungen kann eine Ausnahme ausgelöst werden:
Eine Zeile kann nicht mit dem angegebenen Format analysiert werden (MalformedLineException). In der Ausnahmemeldung wird die Nummer der Zeile angegeben, die die Ausnahme verursacht hat. Der in der Zeile enthaltene Text wird der ErrorLine-Eigenschaft zugewiesen.
Die angegebene Datei ist nicht vorhanden (FileNotFoundException).
Es besteht 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).
Siehe auch
Aufgaben
Gewusst wie: Lesen aus durch Kommas getrennten Textdateien in Visual Basic
Gewusst wie: Lesen aus einer Textdatei mit fester Breite in Visual Basic
Referenz
Konzepte
Analysieren von Textdateien mit dem TextFieldParser-Objekt (Visual Basic)