Porady: odczytywanie z plików tekstowych o stałej szerokości w Visual Basic

Obiekt TextFieldParser umożliwia łatwe i wydajne analizowanie plików tekstowych ze strukturą, takich jak dzienniki.

Właściwość TextFieldType określa, czy przeanalizowany plik jest plikiem rozdzielanym, czy ma pola tekstu o stałej szerokości. W pliku tekstowym o stałej szerokości pole na końcu może mieć zmienną szerokość. Aby określić, że pole na końcu ma zmienną szerokość, zdefiniuj je tak, aby szerokość była mniejsza lub równa zero.

Aby przeanalizować plik tekstowy o stałej szerokości

  1. Utwórz nowy element TextFieldParser. Poniższy kod tworzy TextFieldParser nazwę Reader i otwiera plik test.log.

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. Zdefiniuj TextFieldType właściwość jako FixedWidth, definiując szerokość i format. Poniższy kod definiuje kolumny tekstu; pierwszy to 5 znaków szerokości, drugi 10, trzeci 11, a czwarty ma zmienną szerokość.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Pętla przez pola w pliku. Jeśli jakiekolwiek wiersze są uszkodzone, zgłoś błąd i kontynuuj analizowanie.

    Dim currentRow As String()
    While Not Reader.EndOfData
        Try
            currentRow = Reader.ReadFields()
            Dim currentField As String
            For Each currentField In currentRow
                MsgBox(currentField)
            Next
        Catch ex As Microsoft.VisualBasic.
                    FileIO.MalformedLineException
            MsgBox("Line " & ex.Message &
            "is not valid and will be skipped.")
        End Try
    
  4. Zamknij bloki While i Using za pomocą elementów End While i i End Using.

        End While
    End Using
    

Przykład

Ten przykład odczytuje z pliku test.log.

Using Reader As New Microsoft.VisualBasic.FileIO.
   TextFieldParser("C:\TestFolder\test.log")

    Reader.TextFieldType =
       Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    Dim currentRow As String()
    While Not Reader.EndOfData
        Try
            currentRow = Reader.ReadFields()
            Dim currentField As String
            For Each currentField In currentRow
                MsgBox(currentField)
            Next
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
            MsgBox("Line " & ex.Message &
            "is not valid and will be skipped.")
        End Try
    End While
End Using

Niezawodne programowanie

Następujące warunki mogą spowodować wyjątek:

Zobacz też