Dela via


Anvisningar: läsa från textfiler med fast bredd i Visual Basic

Objektet TextFieldParser är ett sätt att enkelt och effektivt parsa strukturerade textfiler, till exempel loggar.

Egenskapen TextFieldType definierar om den parsade filen är en avgränsad fil eller en fil som har textfält med fast bredd. I en textfil med fast bredd kan fältet i slutet ha en variabelbredd. Om du vill ange att fältet i slutet har en variabelbredd definierar du att det ska ha en bredd som är mindre än eller lika med noll.

Så här parsar du en textfil med fast bredd

  1. Skapa en ny TextFieldParser. Följande kod skapar namnet TextFieldParserReader och öppnar filen test.log.

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. TextFieldType Definiera egenskapen som FixedWidth, som definierar bredd och format. Följande kod definierar kolumnerna i text; den första är 5 tecken bred, den andra 10, den tredje 11 och den fjärde är av variabel bredd.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Loopa igenom fälten i filen. Om några rader är skadade rapporterar du ett fel och fortsätter parsningen.

    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. Stäng blocken While och Using med End While och End Using.

        End While
    End Using
    

Exempel

Det här exemplet läser från filen 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

Robust programmering

Följande villkor kan orsaka ett undantag:

Se även