Gewusst wie: Lesen aus Textdateien mit mehreren Formaten in Visual Basic
Aktualisiert: November 2007
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
Definieren Sie das erwartete Format und das für das Erfassen eines Fehlers verwendete Format.
Dim StdFormat As Integer()= {5,10,11,-1} Dim ErrorFormat As Integer() = {5,5,-1}
Erstellen Sie ein neues TextFieldParser-Objekt, und definiert Sie Breite und Format.
Using MyReader As New _ Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth
Durchlaufen Sie die Zeilen, und testen Sie das Format vor dem Lesen.
Dim CurrentRow As String() While Not MyReader.EndOfData Try Dim RowType As String = 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) CurrentRow = MyReader.ReadFields MyReader.SetFieldWidths(StdFormat) Else 'Otherwise parse the fields normally CurrentRow = MyReader.ReadFields For Each newString As String In CurrentRow My.Computer.FileSystem.WriteAllText _ ("newFile.txt", newString, True) Next End If
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
In diesem Beispiel wird aus der Datei testfile.txt gelesen.
Dim StdFormat As Integer() = {5, 10, 11, -1}
Dim ErrorFormat As Integer() = {5, 5, -1}
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = StdFormat
Dim CurrentRow As String()
While Not MyReader.EndOfData
Try
Dim RowType As String = 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)
CurrentRow = MyReader.ReadFields
MyReader.SetFieldWidths(StdFormat)
Else
' Otherwise parse the fields normally
CurrentRow = MyReader.ReadFields
For Each newString As String In CurrentRow
My.Computer.FileSystem.WriteAllText("newFile.txt", newString, True)
Next
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
End While
End Using
Robuste Programmierung
Unter den folgenden Umständen können Ausnahmen auftreten:
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 kann über die TextFieldParser.ErrorLine-Eigenschaft abgerufen werden.
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
Konzepte
Analysieren von Textdateien mit dem TextFieldParser-Objekt
Referenz
TextFieldParser.PeekChars-Methode
My.Computer.FileSystem.WriteAllText-Methode