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

  1. 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}
    
  2. 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
    
  3. 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
    
  4. 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:

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-Objekt

TextFieldParser.PeekChars-Methode

MalformedLineException

My.Computer.FileSystem.WriteAllText-Methode

TextFieldParser.EndOfData-Eigenschaft

TextFieldParser.TextFieldType-Eigenschaft