Cómo: Leer archivos de texto de ancho fijo en Visual Basic

El objeto TextFieldParser proporciona una manera fácil y eficaz de analizar archivos de texto estructurados, como registros.

La propiedad TextFieldType define si el archivo analizado se trata de un archivo delimitado o uno que tiene campos de texto de ancho fijo. En un archivo de texto de ancho fijo, el campo puede tener un ancho variable al final. Para especificar que el campo tiene un ancho variable al final, debe definirlo para que tenga un ancho menor o igual que cero.

Para analizar un archivo de texto de ancho fijo

  1. Cree un nuevo TextFieldParser. El código siguiente crea el TextFieldParser denominado Reader y abre el archivo test.log.

    Using Reader As New Microsoft.VisualBasic.
        FileIO.TextFieldParser("C:\TestFolder\test.log")
    
  2. Defina la propiedad TextFieldType como FixedWidth definiendo el ancho y el formato. El código siguiente define las columnas de texto; la primera tiene un ancho de 5 caracteres, la segunda de 10, la tercera de 11 y la cuarta es de ancho variable.

    Reader.TextFieldType =
    Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
    Reader.SetFieldWidths(5, 10, 11, -1)
    
  3. Recorra en bucle los campos del archivo. Si alguna línea está dañada, cree un informe de error y continúe el análisis.

    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. Cierre los bloques While y Using con End While y End Using.

        End While
    End Using
    

Ejemplo

En este ejemplo se lee el archivo 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

Programación sólida

Las condiciones siguientes pueden provocar una excepción:

  • No se puede analizar una fila utilizando el formato especificado (MalformedLineException). El mensaje de excepción especifica la línea que produce la excepción y la propiedad ErrorLine se asigna al texto contenido en la línea.

  • El archivo especificado no existe (FileNotFoundException).

  • Una situación de confianza parcial en la que el usuario no tiene los permisos necesarios para tener acceso al archivo. (SecurityException).

  • La ruta de acceso del archivo es demasiado larga (PathTooLongException).

  • El usuario no tiene permisos suficientes para acceder al archivo (UnauthorizedAccessException).

Vea también