Capturar un fichero de texto

24/07/2006 - 13:45 por swaplus | Informe spam
Hola grupo!

Necesito leer un fichero de texto puro (ASCII) que proviene de una
estación UNIX. No está en formato de base de datos. El fichero es
enorme y de él sólo quiero leer ciertas tablas de valores numéricos
que están identificadas por una serie de marcadores de inicio y de
final. No se puede hacer desde Excel con DATOS->TEXTO EN COLUMNAS
porque no tiene la estructura de base de datos.

Necesitaría una macro que abra el fichero, lea la zona que interesa y
lo vuelque a una hoja de cálculo.

Os agradecería alguna idea sobre los comandos necesarios para abrir y
leer el fichero.

Muchas gracias
 

Leer las respuestas

#1 zipzap
24/07/2006 - 14:27 | Informe spam
Mira si te sirve esto:
Si tienes alguna duda ...
'
Public Sub LOADFILE()
'
Dim fileToOpen As String
Dim iFilenumOpen As Integer
Dim LineaLoad1 As Long
Dim LongitudArchivo As Long
Dim BytesLeidos As Long
'
Dim datosLoad1 As Worksheet
Dim DatosREAD As String
Dim Dato1 As String
Dim Dato2 As String
Dim Dato3 As String
'
Dim NumRegs
'NombreFileMacro$ = ThisWorkbook.Name
Windows(NombreFileMacro$).Activate

'Seleccionar el fichero para abrir
fileToOpen = Application.GetOpenFilename("Files (*.*)", , _
Titulo & " (Seleccione fichero para Abrir)")
If fileToOpen <> False Then
continuar = MsgBox(" ¿Abrir fichero " & fileToOpen & _
"'", vbOKCancel, Titulo)
If continuar = vbCancel Then GoTo Salir
Else
GoTo Salir
End If

'
'Asignar la variable Sheet a la hoja es más rápido
Set datosLoad1 = Hoja1
'
iFilenumOpen = FreeFile
Open fileToOpen For Input Access Read As #iFilenumOpen
'Para saber la longitud del archivo
'LongitudArchivo = LOF(iFilenumOpen)
'
'LineaLeida es el contador de registros leidos del fichero y también
el contador de filas de excel
'Cuidado no sobrepasar las 65535 filas.
LineaLeida = 0
'Leer hasta el final del archivo EOF(numeroarchivo)
Do While Not (EOF(iFilenumOpen))
Line Input #iFilenumOpen, DatosREAD
LineaLeida = LineaLeida + 1
' Obtiene 3 datos de las posiciones 6, 28 y 45 con 5, 11, y 12
caracteres de longitud
Dato1 = Mid$(DatosREAD, 6, 5)
Dato2 = Mid$(DatosREAD, 28, 11)
Dato3 = Mid$(DatosREAD, 45, 12)
'Graba los datos en la celdas
datosLoad1.Range("A" & LineaLeida) = Dato1
datosLoad1.Range("B" & LineaLeida) = Dato2
datosLoad1.Range("C" & LineaLeida) = Dato3
Loop

End Sub

-

Saludos

Preguntas similares