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

Actualización: noviembre 2007

El objeto TextFieldParser proporciona un método para analizar de forma sencilla y eficaz archivos de texto estructurados, como registros.

La propiedad TextFieldType define si se trata de un archivo delimitado o uno con campos de ancho fijo de texto. Para especificar un campo de ancho variable en un archivo de ancho fijo, defina el ancho de campo como -1.

Para analizar un archivo de texto de ancho fijo

  1. Cree un nuevo objeto TextFieldParser. El código siguiente crea el objeto 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 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 eficaz

Las condiciones siguientes pueden producir una excepción:

Vea también

Tareas

Cómo: Leer archivos de texto delimitado por comas en Visual Basic

Cómo: Leer archivos de texto con varios formatos en Visual Basic

Tutorial: Manipular archivos y directorios en Visual Basic

Solución de problemas: Leer y escribir en archivos de texto

Solución de problemas de excepciones: Microsoft.VisualBasic.FileIO.TextFieldParser.MalformedLineException

Conceptos

Analizar archivos de texto con el objeto TextFieldParser

Referencia

TextFieldParser (Objeto)