Condividi tramite


Procedura: leggere file di testo con più formati in Visual Basic

L'oggetto TextFieldParser consente di analizzare in modo facile ed efficace i file di testo strutturati, ad esempio i log. È possibile elaborare un file con più formati utilizzando il metodo PeekChars per determinare il formato di ciascuna riga mentre si analizza il file.

Per analizzare un file di testo con più formati

  1. Aggiungere un file di testo denominato testfile.txt al progetto. Aggiungere al file di testo quanto segue:

    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.
    
  2. Definire il formato previsto e il formato utilizzato quando viene restituito un errore. Dato che l'ultima voce di ogni matrice è - 1, si presuppone quindi che il campo sia di larghezza variabile. Questo si verifica quando l'ultima voce della matrice è minore o uguale a 0.

    Dim stdFormat As Integer() = {5, 10, 11, -1}
    Dim errorFormat As Integer() = {5, 5, -1}
    
  3. Creare un nuovo oggetto TextFieldParser, definendone l'ampiezza e il formato.

    Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")
        MyReader.TextFieldType = FileIO.FieldType.FixedWidth
        MyReader.FieldWidths = stdFormat
    
  4. Far scorrere le righe, verificando il formato prima di eseguire la lettura.

    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()
    
  5. Scrivere gli errori nella console.

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

Esempio

Di seguito è riportato un esempio completo che legge dal file 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()

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à 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 a larghezza fissa in Visual Basic

Riferimenti

Microsoft.VisualBasic.FileIO.TextFieldParser

PeekChars

MalformedLineException

WriteAllText

EndOfData

TextFieldType

Concetti

Analisi dei file di testo con l'oggetto TextFieldParser (Visual Basic)

Cronologia delle modifiche

Data

Cronologia

Motivo

Gennaio 2011

Aggiunte informazioni sui campi a larghezza variabile.

Commenti e suggerimenti dei clienti.