Fichas de Referencia L.O. Basic

Ficha nº 8.
Archivos

Nivel: Avanzado

Créditos

Autor: Jean-François Nifenecker – jean-francois.nifenecker@laposte.net

Traducción y adaptación: B. Antonio Fernández

Esta ficha de referencia está bajo licencia de CreativeCommons BY-SA v3 (fr) o posterior.: https://creativecommons.org/licenses/by-sa/3.0/fr/

img_FB26208-001

Este documento es una adaptación del documento original, en Francés, que se puede obtener en la Wiki de publicaciones de LibreOffice.

Versión

Fecha

Comentarios

2.0

06/04/2019

Mise en forme

2.0_ES

15/09/2026

Traducción y cambio de formato para esta versión

Somos como enanos a hombros de gigantes. Si alcanzamos a ver más cosas y más lejanas que ellos, no es por la perspicacia de nuestra visión, ni por nuestra grandeza, sino porque son ellos quienes nos elevan. (atribuido a Bernard de Chartres )

Manipulación de archivos y directorios

Mediante las instrucciones nativas

Dir()

Devuelve el nombre de un archivo o directorio o también de todos
los archivos y directorios existentes en una unidad o directorio
correspondiente a la ruta especificada.

FileCopy()

Copia un archivo.

FileDateTime()

Devuelve una cadena de caracteres que contiene la fecha y hora de
creación o última modificación de un archivo.

FileExists()

Devuelve True si existe el archivo o directorio.

FileLen()

Devuelve el tamaño de un archivo (en bytes).

GetAttr()

Devuelve el tipo de archivo, unidad o directorio.

GetPathSeparator()

Devuelve el separador de ruta usado en el sistema operativo.

Kill()

Elimina un archivo de la unidad.

MkDir()

Crea un directorio nuevo.

Name()

Renombra un archivo o directorio existente

RmDir()

Elimina un directorio existente

SetAttr()

Define los atributos del archivo indicado.

Mediante un objeto SimpleFileAccess

Métodos del servicio com.sun.star.ucb.SimpleFileAccess:

oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")

copy

Copia un archivo.

createFolder

Crea un directorio nuevo.

exists

Verifica si un archivo o directorio existe.

getContentType

Devuelve el tipo de contenido del archivo.

getDateTimeModified

Devuelve la fecha de la última modificación del archivo.

getFolderContents

Devuelve el contenido de un directorio.

getSize

Devuelve el tamaño de un archivo.

isFolder

Verifica si una URL es un directorio.

isReadOnly

Verifica si un archivo es de solo lectura.

kill

Elimina un archivo o directorio.
Incluso elimina un directorio aunque no esté vacío.

move

Mueve un archivo.

setInteractionHandler

Establece un controlador de interacción para operaciones.

setReadOnly

Activa el indicador de sólo lectura del archivo (se necesitan los
permisos adecuados).

Rutas de los archivos

Al ser multiplataforma, las rutas de los archivos se expresan en formato URL:
file:///soporte/Ruta/al/archivo.ext

Funciones de conversión:

De nativo a URL

NombreUrl = ConvertToURL(NombreArchivoNativo)

De URL a nativo

NombreOS  = ConvertFromURL(NombreArchivoURL)

Importación de archivos de texto separados por comas (CSV)

Manualmente

Figura 1: Diálogo de importación de Calc

Diálogo de importación de Calc

Elementos de los filtros CSV

Los filtros CSV necesitan 5 parámetros (Tome como referencia el diálogo mostrado).

Opciones de separador:

Código Ascii del separador (vea la tabla Ascii en Ficha 5). "9"

Si hay alternativas sepárelas mediante / "9/36"

Si son varios caracteres fusionados agregue /MRG "36/36/MRG"

Delimitador de cadena

Código Ascii del delimitador (vea tabla Ascii) "34" ("" si no hay ninguno)

Conjunto de caracteres: (si se indica "", se asume UTF-8) los más usuales son:

Windows-1252/WinLatin1

ANSI

ISO-8859-1

12

ISO-8859-15/EURO

22

UTF-8

76

Lista actualizada de conjuntos: servicio "com.sun.star.document.FilterFactory"

Primera linea de datos del archivo a importar (desde la fila)

Número de la línea (empezando por 1) "2" ("1" o "" si es la  1ª linea)

Formato de las columnas (tipo de columna)

Filtro de importación CSV

El filtro está formado por la concatenación de sus 5 parámetros separados por comas:

img_FB26208-003

Información adicional

Códigos Ascii más frecuentes (notación decimal)

9

Tabulador

32

Espacio

34

"

35

#

36

$

39

'

44

,

58

:

59

;

Formato de las columnas

1

Estándar (automático Calc)

5

YY/MM/DD

2

Texto

9

(descartar columna (ocultar)

3

MM/DD/YY

10

Formato US (sep. decimales y millares)

4

DD/MM/YY

 

Importar un archivo CSV en una hoja de cálculo Calc

Se quiere copiar el contenido de un archivo CSV con nombre con nombre MiArchivo.csv en la hoja con nombre NombreHoja del libro en uso.

El proceso se efectua mediante el empleo de una memoria intermedia (buffer) y después la eliminación de la  misma.

Dim CsvURL As String 'ruta del archivo .csv origen
Dim Filtro As String
Dim Hoja As Object 'hoja destino en el libro
Hoja = ThisComponent.Sheets.getByName("Nombre_de_la_Hoja")
CsvURL = ConvertToURL("C:\ruta\a\MiArchivo.csv")
'opciones de lectura del archivo .csv
Filtro = "9,34,ANSI,1,1/2/ 2/2/ 3/1/ 4/1/"
'importación mediante un buffer entre la hoja y el origen .csv
Hoja.link(CsvURL, "", "Text - txt - csv (StarCalc)", _
Filtro, com.sun.star.sheet.SheetLinkMode.VALUE)
'liberación del buffer para volver el libro autonomo
Hoja.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)

Crear un libro Calc partiendo de un archivo CSV

Se quiere crear un libro Cal a partir de un archivo CSV con nombre MiArchivo.csv.

Dim props1(1) As New com.sun.star.beans.PropertyValue
Dim props2()
Dim CsvURL As String 'ruta del archivo .csv origen
Dim DocURL As String 'ruta del archivo .ods destino
Dim oDoc As Object 'Libro destino
CsvURL = ConvertToURL("C:\ruta\a\MiArchivo.csv")
'opciones de lectura del archivo .csv
props1(0).Name = "FilterName"
props1(0).Value = "Text - txt - csv (StarCalc)"
props1(1).Name = "FilterOptions"
props1(1).Value = "9,34,ANSI,1,1/2/ 2/2/ 3/1/ 4/1/"
'carga del archivo origen .csv en la primera hoja
oDoc = StarDesktop.loadComponentFromURL(CsvURL, "_blank", 0, props1())
'guardado del libro en formato .ods
DocURL = ConvertToURL("C:\ruta\a\MiLibro.ods")
oDoc.storeAsURL(DocURL, props2())

Gestión de contenidos – Instrucciones nativas

Pasos del proceso

  1. Obtener el n.º  identificativo interno del archivo con (FreeFile),

  2. Abrir  el archivo (Open),

  3. Escribir en  archivo (Print, Put o Write) o leerlo (Get, Line Input# ou Input#),

  4. Cerrar el archivo (Close)

Acceso al contenido de los archivos mediante su n.º identificativo (handle)

Close

Cierra un archivo previamente abierto con Open.

Eof()

Determina si el cursor del archivo ha llegado al final del archivo

FileAttr()

Devuelve el modo de acceso en que el archivo se ha abierto (handle)

FreeFile

Devuelve un n.º handle disponible antes de la apertura de un archivo.

Get

Lee un registro de archivo para insertarlo en una variable.

Input

Lee los datos de un archivo secuencial abierto.

Line Input

Lee una linea de un archivo.

Loc()

Devuelve la posición actual en un archivo abierto.

Lof()

Devuelve el tamaño de un archivo abierto (en bytes)

Open

Abre un canal de datos

Print

Escribe los datos en un archivo secuencial (linea no delimitada).

Put

Escribe un registro en un archivo.

Reset

Cierra todos los archivos abiertos y fuerza la escritura en disco del contenido de la memoria intermedia (buffers) de los archivos.

Seek()

Devuelve la posición de la siguiente escritura o lectura en un archivo abierto con la instrucción  Open For Random.

Write

Escibe los datos en un archivo secuencial (linea, delimitador).

Modos de apertura (archivos de texto)

Escritura secuencial

Open For Output

Lectura secuencial

Open For Input

Ejemplo de lectura secuencial de un archivo de texto

Lectura de un archivo identificado por su dirección URL.

Dim Handle As Integer, Linea As String, URLArchivo as String
Handle = FreeFile 'obtiene el n.º identificativo del archivo abierto
Open URLArchivo For Input As #Handle
'bucle para lectura linea a linea
Do While Not Eof(Handle)
Line Input #Handle, Line 'lectura de cada linea
Loop
Close #Handle

Ejemplo de escritura secuencial de un archivo de texto

Escritura en un archivo identificado por su dirección URL.

Dim Handle As Integer
Handle = FreeFile ' obtiene el n.º identificativo de archivo abierto
Open URLArchivo For Output As #Handle
'écritura linea a linea
Print #Handle, "Un Texto."
Print #Handle, "De nuevo otro texto..."
Print #Handle, "Para acabar."
Close #Handle

Gestión de contenidos – «flujo» de la API

Usa la llamada a los servicios SimpleFileAccess y Stream de la API de LibreOffice.

Principio

Ejemplo: (vea el código siguiente).

Figura 2: Escritura de un archivo de texto

Escritura de un archivo de texto

Pasos del proceso

  1. Crear el objeto de acceso a los archivos.

oSFA = createUNOService ("com.sun.star.ucb.SimpleFileAccess")

  1. Conectar el flujo correspondiente al tratamiento (según tipo de acceso).

  2. Escribir en el archivo o leerlo (según el tipo de archivo).

  3. En caso de escritura se debe purgar el flujo (.flush),

  4. Cerrar el archivo (.closeXxx).

Acceso al contenido de los archivos

Servicio SimpleFileAccess (SFA)

openFileRead

Abre el archivo en modo lectura.

openFileWrite

Abre el archivo en modo escritura.

openFileReadWrite

Abre el archivo en modo lectura y escritura.

Servicios Flujo (InputStream, OutputStream y Stream)

Son los servicios «activos». Correspondencia entre los métodos del servicio SFA y los flujos:

Método SFA

Servicio flujo

openFileRead

com.sun.star.io.InputStream o com.sun.star.io.TextInputStream

openFileWrite

com.sun.star.io.OutputStream o com.sun.star.io.TextOutputStream

openFileReadWrite

com.sun.star.io.Stream

Servicio Stream

getInputStream

Devuelve la parte InputStream del flujo lectura/escritura.

  • El cierre de este flujo implica la del flujo OutputStream.

getOutputStream

Devuelve la parte OutputStream del flujo lectura/escritura.

  • El cierre de este flujo implica la del flujo InputStream.

Servicio InputStream

readBytes

Lee el número especificado de bytes.

readSomeBytes

Lee el número de bytes disponibles con el máximo especificado.

skipBytes

Salta el número especificado de bytes (valor positivo).

available

Indica el n.º de bytes que pueden ser leidos o saltados sin bloqueo

closeInput

Cierra el flujo.

Servicio TextInputStream

Heredado de InputStream.

readLine: Lee el texto hasta encontrar un salto de linea (CR, LF, ou CRLF) o EOF y devuelve la cadena correspondiente (omitiendo CR ou LF).

readString: Lee el texto hasta encontrar uno de los delimitadores o EOF. Y devuelve la cadena correspondiente.

isEOF: Devuelve el estado de EOF.

setEncoding: Establece la codificación  de caracteres (UTF-8 predeterminada). Los nombres utilizados son los que se encuentran en el documento: http://www.iana.org/assignments/character-sets (columna Name). El conjunto de caracteres disponibles dependen de la implementación.

Servicio OutputStream

writeBytes

Escribe una secuencia completa en el flujo (llamada de bloqueo).

flush

Vacía la memoria intermedia (buffers) usada por el flujo

closeOutput

Se utiliza par indicar que se han escrito todos los datos.

Service TextOutputStream (Heredado de OutputStream).

writeString: Escribe una cadena en el flujo utilizando la codificación definida por setEncoding.

Los saltos de linea y delimitadores necesarios se tienen que añadir manualmente a la cadena.

setEncoding: Establece la codificación de caracteres (UTF-8 predeterminada).

Los nombres utilizados son los que se encuentran en el documento: http://www.iana.org/assignments/character-sets (col. Name). El conjunto de caracteres disponibles dependen de la ’implementación.

Ejemplo: Lectura de un archivo de texto

Dim oSFA As Object, oInText As Object
Dim URLArchivo As String, Linea As String
oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
URLArchivo = ConvertToURL("C:\ruta\a\MiArchivo.txt")
oInText = createUNOService("com.sun.star.io.TextInputStream")
oInText.setInputStream(oSFA.openFileRead(URLArchivo))
Linea = oInText.readLine()
oInText.closeInput()

Ejemplo: Escritura en un archivo de texto

Dim oSFA As Object, oOutText As Object
Dim URLArchivo As String
oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
URLArchivo = ConvertToURL("C:\ruta\a\MiArchivo.txt")
oOutText = createUNOService("com.sun.star.io.TextOutputStream")
oOutText.setOutputStream(oSFA.openFileWrite(URLArchivo))
'Escritura (se debe especificar el delimitador de linea CRLF)
'- [empleo de CRLF (Windows)]
oOutText.WriteString("Hola Mundo" & Chr(13) & Chr(10))
oOutText.WriteString("Linea 2" & Chr(13) & Chr(10))
'vaciado de los buffers y cierre
oOutText.flush
oOutText
.closeOutput()

Contenido