Procedura: Leggere da file di testo a larghezza fissa in Visual Basic

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 il file analizzato è un file delimitato o un file con campi di testo a larghezza fissa. In un file di testo a larghezza fissa il campo alla fine può avere una larghezza variabile. Per specificare che il campo alla fine deve avere una larghezza variabile, definirlo in modo che abbia una larghezza minore o uguale a zero.

Per analizzare un file di testo a larghezza fissa

  1. Creare un nuovo TextFieldParser. Il codice riportato di seguito crea l'oggetto TextFieldParser denominato Reader e apre il file test.log.

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. Definire la proprietà TextFieldType come FixedWidth, impostandone la larghezza e il formato. Il codice seguente definisce le colonne di testo: la prima ha una larghezza di 5 caratteri, la seconda di 10 e la terza di 11, mentre la quarta ha una larghezza variabile.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Eseguire il ciclo attraverso i campi nel file. Se sono presenti righe danneggiate, segnalare un 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
    
  4. Chiudere i blocchi While e Using con End While ed End Using.

        End While
    End Using
    

Esempio

Nell'esempio riportato di seguito viene letto il 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:

  • Impossibile analizzare la riga usando il formato specificato (MalformedLineException). Il messaggio di eccezione specifica la riga che ha generato l'eccezione, mentre alla proprietà ErrorLine viene assegnato il testo contenuto nella riga.

  • File specificato inesistente (FileNotFoundException).

  • Un contesto di attendibilità parziale in cui gli utenti non dispongono di autorizzazioni sufficienti per accedere al file (SecurityException).

  • Percorso del file troppo lungo (PathTooLongException).

  • L'utente non dispone di autorizzazioni sufficienti per accedere al file (UnauthorizedAccessException).

Vedi anche