Como: Ler arquivos de texto com vários formatos de Visual Basic
O objeto TextFieldParser fornece uma maneira para facilmente e com eficiência analisar arquivos texto estruturados, como logs. Você pode processar um arquivo com vários formatos usando o método PeekChars para determinar o formato de cada linha conforme você analisa através do arquivo.
Para analisar um arquivo de texto com vários formatos
Adicione um arquivo de texto chamado testfile. txt ao seu projeto. Adicione o seguinte conteúdo para o arquivo de texto.
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.
Defina o formato esperado e o formato usado quando um erro é relatado. A última entrada em cada matriz é -1, portanto o último campo será considerado de largura variável. Isso ocorre quando a última entrada na matriz é menor ou igual a 0.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Criar uma nova TextFieldParser o objeto, definindo a largura e o formato.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
Percorra as linhas, testando seus formatos antes da leitura.
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()
Grave erros no console.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Exemplo
Veja a seguir o exemplo completo que lê o arquivo 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()
Programação robusta
As seguintes condições podem causar uma exceção:
Uma linha não pode ser analisado usando o formato especificado (MalformedLineException). A mensagem de exceção especifica a linha causando a exceção, enquanto o ErrorLine property é atribuída ao texto contido na linha.
O arquivo especificado não existe (FileNotFoundException).
Uma situação de confiança parcial (partial-trust) na qual o usuário não tem permissões suficientes para acessar o arquivo. (SecurityException).
O caminho é muito longo (PathTooLongException).
O usuário não tem permissões suficientes para acessar o arquivo (UnauthorizedAccessException).
Consulte também
Tarefas
Como: Ler arquivos de texto delimitado por vírgula em Visual Basic
Como: Ler arquivos de texto de largura fixa no Visual Basic
Referência
Microsoft.VisualBasic.FileIO.TextFieldParser
Conceitos
Analisar os arquivos de texto com o objeto TextFieldParser (Visual Basic)
Histórico de alterações
Date |
History |
Motivo |
Janeiro de 2011 |
Adicionadas informações sobre campos de largura variável. |
Comentários do cliente. |