El sáb, 20-03-2010 a las 21:07 -0600, Mauricio Baeza escribió:
> El 20 de marzo de 2010 14:19, José Jesús <[email protected]> escribió:
>
> > Estoy buscando como importar un archivo de texto a Calc leyendo carácter
> > por carácter (o string), algo como "fgets".
> > Tengo un archivo de texto en el cual se han dispuesto registros de 500
> > caracteres, sin carácter de separación alguno. El primer carácter
> > siempre indica el tipo de registro. Según el tipo de registro los campos
> > (dentro de ese registro) tienen una longitud determinada, pero los
> > campos no tienen porque tener la misma longitud.
> >
> > ¿Cual sería el código para apuntar hacia el archivo? y luego ir leyendo
> > cadenas de 500 en 500 caracteres?
> >
> > Saludos a todos,
> > JJ Palacios
> >
>
> Hola...
>
> Por favor, checa si la siguiente macro te sirve, si es así, la puedes
> convertir en función de forma muy sencilla...
>
> Sub LeerArchivo()
> Dim oAA As Object
> Dim sRuta As String
> Dim oArchivo As Object
> Dim oTexto As Object
> Dim sContenido As String
> Dim co1 As Long
>
> 'La ruta del archivo
> sRuta = ConvertToUrl( "/home/mau/Desktop/archivo.txt" )
> 'Servicio para acceso a archivos
> oAA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
> 'Servicio para manipular archivos
> oTexto = createUnoService("com.sun.star.io.TextInputStream")
> 'Verificamos que exista el archivo
> If oAA.exists( sRuta ) Then
> 'Abrimos el archivo para lectura/escritura
> oArchivo = oAA.openFileReadWrite( sRuta )
> 'El archivo puede ser más grande pero no cabe en una variable
> String, si pasa el tamaño te devuelve una cadena vacía
> If oArchivo.getLength < 65535 Then
> 'Leemos el archivo de forma binaria
> oTexto.setInputStream( oArchivo.getInputStream )
> 'Leemos el contenido completo como texto
> sContenido = oTexto.readString( Array(""), True )
> 'Leemos cada 500 caracteres
> For co1 = 1 To Len(sContenido) Step 500
> 'Cuidado, si tu archivo es muy grande este ciclo puede ser
> muy largo
> 'solo te lo muestro como ejemplo, aquí se supone
> manipularias el archivo
> 'a tus necesidades
> MsgBox Mid( sContenido, co1, 500 )
> Next
> Else
> MsgBox "Archivo demasiado grande"
> End If
> Else
> MsgBox "No se encontró el archivo: " & ConvertFromUrl(sRuta)
> End If
>
> End Sub
>
>
> Saludos
> Mauricio
>
Gracias Mauricio,
Efectivamente el fichero es mayor de 65535 (desconocía este dato, como
ya apunto Ariel). Esta fue mi primera apuesta, pero el archivo es algo
mayor, puede contener entre 300 y 600 registros de 500 caracteres.
También estuve haciendo pruebas con este ejemplo de la ayuda:
Sub EjemploAccesoAleatorio
Dim iNumero As Integer
Dim sTexto As Variant REM Debe ser una variante
Dim aArchivo As String
aArchivo = "/home/jj/prueba.txt"
iNumero = Freefile
Open aArchivo For Random As #iNumero Len=32
Seek #iNumero,1 REM Posición al principio
Put #iNumero,, "Esta es la primera línea de texto" REM Rellenar
línea con texto
Print #iNumero, "Esta es la segunda línea de texto"
Print #iNumero, "Esta es la tercera línea de texto"
Seek #iNumero,2
Get #iNumero,,sTexto
Print sTexto
Close #iNumero
iNumero = Freefile
Open aArchivo For Random As #iNumero Len=500
Get #iNumero,2,sTexto
Put #iNumero,,"Esto es un texto nuevo"
Get #iNumero,1,sTexto
Get #iNumero,2,sTexto
Put #iNumero,20,"Este es el texto del registro 20"
Print Lof(#iNumero)
Close #iNumero
end sub
No guarda datos en formato texto (o al menos no en UTF-8,
ISO-8859-1, ...) y en el primer "Get" da error.
Saludos,
JJ
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]