Procedura: leggere file di testo a larghezza fissa in Visual Basic
Aggiornamento: novembre 2007
L'oggetto TextFieldParser consente di analizzare in modo facile ed efficace i file di testo strutturati, ad esempio i log.
La proprietà TextFieldType definisce se si tratta di un file delimitato o di un file con campi di testo a larghezza fissa. Per specificare un campo di larghezza variabile in un file a larghezza fissa, impostare la larghezza del campo su -1.
Per analizzare un file di testo a larghezza fissa
Creare un nuovo oggetto TextFieldParser. Nel codice riportato di seguito viene creato l'oggetto TextFieldParser denominato Reader e viene aperto il file test.log.
Using Reader As New _ Microsoft.VisualBasic.FileIO.TextFieldParser _ ("C:\TestFolder\test.log")
Definire la proprietà TextFieldType come FixedWidth, impostandone la larghezza e il formato. Nel codice riportato di seguito vengono definite le colonne di testo: la prima ha una larghezza pari a 5 caratteri, la seconda a 10, la terza a 11 e la quarta ha una larghezza variabile.
Reader.TextFieldType = _ Microsoft.VisualBasic.FileIO.FieldType.FixedWidth Reader.SetFieldWidths(5, 10, 11, -1)
Scorrere i campi nel file. Se sono presenti righe danneggiate, segnalare l'errore e continuare l'analisi.
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
Chiudere i blocchi While e Using con End While e End Using.
End While End Using
Esempio
Nell'esempio riportato di seguito la lettura viene eseguita dal 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
Programmazione efficiente
Le seguenti condizioni possono generare un'eccezione:
Non è possibile analizzare una riga utilizzando il formato specificato (MalformedLineException). Nel messaggio di eccezione viene specificata la riga che ha generato l'eccezione, mentre la Proprietà TextFieldParser.ErrorLine viene assegnata al testo contenuto nella riga.
Il file specificato non esiste (FileNotFoundException).
Un contesto di attendibilità parziale in cui gli utenti non dispongono di autorizzazioni sufficienti per accedere al file (SecurityException).
Il percorso è troppo lungo (PathTooLongException).
L'utente non dispone delle autorizzazioni sufficienti per accedere al file (UnauthorizedAccessException).
Vedere anche
Attività
Procedura: leggere file di testo delimitati da virgola in Visual Basic
Procedura: leggere file di testo con più formati in Visual Basic
Procedura dettagliata: modifica di file e directory in Visual Basic
Risoluzione dei problemi: lettura e scrittura nei file di testo
Concetti
Analisi dei file di testo con l'oggetto TextFieldParser