Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

How to: read from fixed-width text files in Visual Basic

The TextFieldParser object provides a way to easily and efficiently parse structured text files, such as logs.

The TextFieldType property defines whether the parsed file is a delimited file or one that has fixed-width fields of text. In a fixed-width text file, the field at the end can have a variable width. To specify that the field at the end has a variable width, define it to have a width less than or equal to zero.

To parse a fixed-width text file

  1. Create a new TextFieldParser. The following code creates the TextFieldParser named Reader and opens the file test.log.

    Using Reader As New Microsoft.VisualBasic.
     FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. Define the TextFieldType property as FixedWidth, defining the width and format. The following code defines the columns of text; the first is 5 characters wide, the second 10, the third 11, and the fourth is of variable width.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Loop through the fields in the file. If any lines are corrupted, report an error and continue parsing.

    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. Close the While and Using blocks with End While and End Using.

     End While
    End Using
    

Example

This example reads from the file 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 programming

The following conditions may cause an exception:

See also


Feedback

Was this page helpful?

Additional resources