Gewusst wie: Lesen aus Textdateien mit mehreren Formaten in Visual BasicHow to: Read From Text Files with Multiple Formats in Visual Basic

Das TextFieldParser-Objekt bietet eine Möglichkeit, strukturierte Textdateien wie Protokolle einfach und effizient zu analysieren.The TextFieldParser object provides a way to easily and efficiently parse structured text files, such as logs. 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 eine Datei analysieren.You can process a file with multiple formats by using the PeekChars method to determine the format of each line as you parse through the file.

Analysieren einen Textdatei mit mehreren FormatenTo parse a text file with multiple formats

  1. Fügen Sie eine Textdatei mit dem Namen „textfile.txt“ in Ihrem Projekt hinzu.Add a text file named testfile.txt to your project. Fügen Sie folgenden Inhalt in der Textdatei ein.Add the following content to the text file.

    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.  
    
  2. Definieren Sie das erwartete Format und das Format, das verwendet werden soll, wenn ein Fehler gemeldet wird.Define the expected format and the format used when an error is reported. Der letzte Eintrag in jedem Array ist -1. Deshalb wird davon ausgegangen, dass das letzte Feld von variabler Breite ist.The last entry in each array is -1, therefore the last field is assumed to be of variable width. Dies tritt auf, wenn der letzte Eintrag des Arrays weniger oder gleich 0 (null) ist.This occurs when the last entry in the array is less than or equal to 0.

    Dim stdFormat As Integer() = {5, 10, 11, -1}
    Dim errorFormat As Integer() = {5, 5, -1}
    
  3. Erstellen Sie ein neues TextFieldParser-Objekt, das die Breite und das Format definiert.Create a new TextFieldParser object, defining the width and format.

    Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")
        MyReader.TextFieldType = FileIO.FieldType.FixedWidth
        MyReader.FieldWidths = stdFormat
    
  4. Gehen Sie durch die Reihen, und prüfen Sie vor dem Lesen das Format.Loop through the rows, testing for format before reading.

    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()
    
  5. Schreiben Sie Fehler in die Konsole.Write errors to the console.

          Catch ex As Microsoft.VisualBasic.
                        FileIO.MalformedLineException
             MsgBox("Line " & ex.Message & " is invalid.")
          End Try
       End While
    End Using
    

BeispielExample

Unten stehend finden Sie das vollständige Beispiel, das aus der testfile.txt-Datei liest.Following is the complete example that reads from the file testfile.txt.

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 ProgrammierungRobust Programming

Die folgenden Bedingungen können einen Ausnahmefehler verursachen:The following conditions may cause an exception:

Siehe auchSee Also

Microsoft.VisualBasic.FileIO.TextFieldParser
PeekChars
MalformedLineException
WriteAllText
EndOfData
TextFieldType
Gewusst wie: Lesen aus Textdateien mit KommatrennungHow to: Read From Comma-Delimited Text Files
Gewusst wie: Lesen aus einer Textdatei mit fester BreiteHow to: Read From Fixed-width Text Files
Analysieren von Textdateien mit dem TextFieldParser-ObjektParsing Text Files with the TextFieldParser Object