# How to: Read from fext files with multiple formats in Visual Basic

The TextFieldParser object provides a way to easily and efficiently parse structured text files, such as logs. 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.

### To parse a text file with multiple formats

1. Add a text file named testfile.txt to your project. Add the following content to the text file:

Err  1001 Cannot access resource.
Err  0323 Warning: Invalid access attempt.
Acc  10/03/2009User2      Standard user.
Acc  10/04/2009User2      Standard user.

2. Define the expected format and the format used when an error is reported. The last entry in each array is -1, therefore the last field is assumed to be of variable width. 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. Create a new TextFieldParser object, defining the width and format.

Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")

4. Loop through the rows, testing for format before reading.

Dim currentRow As String()
Try
If String.Compare(rowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
Else
' Otherwise parse the fields normally
End If
For Each newString In currentRow
Console.Write(newString & "|")
Next
Console.WriteLine()

5. Write errors to the console.

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


## Example

The 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}
Dim currentRow As String()
Try
If String.Compare(rowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
Else
' Otherwise parse the fields normally
End If
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