Ficheros

Grupo de comandos de instrucción que nos permiten operar con ficheros en disco.

¿Existe fichero?

Comando de instrucción del grupo Ficheros y directorios que informa de la existencia de un fichero del disco.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda

Senda del fichero cuya existencia queremos determinar. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si el fichero existe o false (0) si no existe en disco.

Identificador de variable local numérica de retorno de tamaño en bytes (Opcional)

Variable local en la que el comando retornará el tamaño del fichero (bytes) si éste existe.

Funcionalidad

Comprueba la existencia de un fichero en disco, devolviendo el tamaño de éste en bytes.

Comentarios

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto no es necesario definir la senda completa.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Comprobamos si existe el directorio documentostmp en la caché del cliente y en caso de no existir lo creamos.

Rem ( Creamos el directorio de documentos )
¿Existe fichero? ( sysCacheClientPath +"documentostmp", EXS,  )
If ( ! EXS )
    Crear directorio ( sysCacheClientPath +"documentostmp", Sí,  )

Copiar fichero

Comando de instrucción del grupo Ficheros y directorios que copia un fichero en disco.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda de origen

Senda del fichero que queremos copiar. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Fórmula de senda de destino

Senda del fichero copia que ha de incluir el nombre del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Copia el fichero de origen en la senda de destino.

Comentarios

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Copiamos el fichero original.pdf a original_copia.pdf dentro de la caché el cliente.

Copiar fichero ( sysCacheClientPath +"original.pdf", sysCacheClientPath +"original_copia.pdf", COPIADO )
If ( ! COPIADO )
    Mensaje ( "Fichero original.pdf no copiado", Información, ,  )

Eliminar fichero de disco

Comando de instrucción del grupo Ficheros y directorios que elimina un fichero del disco.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda

Senda del fichero que queremos eliminar. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Elimina un fichero en disco.

Comentarios

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto no es necesario definir la senda completa.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Eliminamos el fichero original.pdf de la caché del cliente en caso de que exista.

¿Existe fichero? ( sysCacheClientPath +"original.pdf", EXISTE, TAMAÑO )
If ( EXISTE )
    Eliminar fichero de disco ( sysCacheClientPath +"original.pdf", OK )

Fichero: abrir

Comando de instrucción del grupo Ficheros y directorios que abre un fichero para lectura o escritura.

Origen de la instrucción: cualquiera.

Destino del subproceso: el mismo que el origen.

Parámetros

Manejador de fichero

Identificador del fichero. Nos permite referenciarlo a la hora de realizar operaciones de lectura o escritura.

Fórmula de senda

Senda del fichero que queremos leer o escribir. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Modo de apertura

Indicaremos qué operaciones realizaremos con el fichero abierto:

  • Lectura/escritura: realizaremos operaciones de lectura y escritura en un fichero ya existente.

  • Lectura/escritura (Crea o agrega): realizaremos operaciones de lectura y escritura en un fichero. Si existe el fichero previamente añade la información a la existente, si no existe crea el fichero.

  • Lectura/escritura (Crea o limpia): realizaremos operaciones de lectura y escritura en un fichero. Si existe el fichero previamente lo sobreescribe borrando la información previa, si no existe crea el fichero.

  • Lectura/escritura en modo texto: similar al modo de apertura "Lectura y escritura" pero además hace que en Windows convierta los terminadores de línea (\n) en (\r\n).

  • Lectura/escritura en modo texto (Crea o agrega): similar al modo de apertura "Lectura/ escritura (Crea o agrega)" pero además hace que en Windows convierta los terminadores de línea (\n) en (\r\n).

  • Lectura/escritura en modo texto (Crea o limpia): similar al modo de apertura "Lectura/ escritura (Crea o limpia)" pero además hace que en Windows convierta los terminadores de línea (\n) en (\r\n).

  • Sólo lectura: realizaremos únicamente operaciones de lectura en un fichero ya existente.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Codificación (Opcional)

Este parámetro nos permitirá elegir la codificación que tendrá el documento a generar. Al desplegar el combo se presentarán los tipos de codificación disponibles.

Funcionalidad

Abre un fichero en disco para realizar operaciones de lectura o escritura según lo hayamos configurado. Si el fichero existe podremos agregar la información o sobrescribir el fichero borrando la información previa. Si no existe podemos crearlo.

Las operaciones de lectura y escritura han de realizarse en el subproceso generado por la apertura del fichero.

Los comandos que realizan las operaciones de lectura y escritura son: fichero: grabar línea, que hacen uso del manejador para indicar en qué fichero se realizará la operación. De esta forma podemos anidar operaciones de lectura y escritura en distintos ficheros.

Las operaciones de lectura y escritura son secuenciales y se realizan línea a línea. Por tanto debemos hacer uso de un bucle por medio del comando For por lo que es posible componer el texto completo que se escribirá en el fichero y realizar la operación con una única ejecución del comando.

Comentarios

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto no es necesario definir la senda completa.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Seleccionamos el fichero que deseamos abrir de tipo *csv o *.txt.

Ventana de selección de fichero ( SND_FIC, OK_ACE, "*.csv, *.txt", tempPath() )
If ( ( !OK_ACE ) | isEmpty(SND_FIC) )
    Set retorno proceso = NO
    Finalizar proceso
Rem ( Abrimos el fichero para leerlo )
Fichero: abrir ( fichero, SND_FIC, Sólo lectura, OK_ABR, .Ninguno )

Fichero: grabar fichero

Comando de instrucción del grupo ficheros y directorios que permite escribir directamente en disco todo el contenido de un fichero a partir del contenido devuelto por una fórmula.

Origen de la instrucción: cualquiera.

Destino del subproceso: el mismo que el origen.

Parámetros

Manejador de fichero

Identificador del fichero que queremos leer. Este habrá sido establecido previamente dentro del mismo proceso mediante el comando de instrucción Fichero: abrir.

Fórmula de dato

Dato que queremos escribir el fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Escribe directamente en disco todo el contenido de un fichero a partir del contenido devuelto por una fórmula.

Comentarios

No añade ningún carácter de fin de línea al grabar el contenido del fichero.

Ejemplo

Pedimos al usuario que nos indique un directorio y creamos en él un fichero de texto que componemos en base a los registros de una tabla:

Rem ( Pedir el directorio donde crear el fichero )
Ventana de selección de directorio ( DIRECTORIO, BOK,  )
If ( BOK )
	Rem ( cargar los registros de una tabla )
	Crear manejador de objeto ( bus, Búsqueda EST_ENT_MES@rcueto app, No aplicable,  )
	Disparar objeto ( bus, 3º plano: Búsqueda servidor (síncrono),  )
		Rem ( Componer la cabecera del fichero de texto )
		Set ( BODY, "Entidad" + ";" + "Año" + ";" + "Importe total" + "\n" )
		Rem ( recorrer la lista e ir componiendo las líneas del fichero )
		Recorrer lista solo lectura
			Set ( BODY, "" + BODY + #ENTIDADES.NAME + ";" + #AÑO + ";" + #TOTAL + "\n" )
	Rem ( Grabar el fichero )
	Fichero: Abrir ( file, DIRECTORIO+"/prueba.csv", Lectura/escritura (Crea o limpia), , ISO-8859-1 )
		Fichero: Grabar fichero ( file, BODY, OK )

Fichero: grabar línea

Comando de instrucción del grupo Ficheros y directorios que escribe una línea en el fichero seleccionado.

Origen de la instrucción: cualquiera.

Destino del subproceso: el mismo que el origen.

Parámetros

Manejador de fichero

Identificador del fichero que queremos escribir. Este habrá sido establecido previamente dentro del mismo proceso mediante el comando de instrucción fichero: abrir.

Fórmula de dato

Dato que queremos escribir en la línea del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

No incluir salto de línea (Opcional)

Si se deja vacía este parámetro o se resuelve con un 0, añadirá un carácter de fin de línea al grabarla. En función del sistema operativo en el que ejecutemos el proceso, como carácter de fin de línea se añadirán los caracteres siguientes:

Windows: \r\n Linux: \n OS X: \r

Si establecemos un 1, no añadirá un carácter de fin de línea al grabar la línea. Esto puede ser útil para componer nosotros todo el texto a grabar en una variable y graba una única línea con todo el texto.

Funcionalidad

Escribe una línea en el fichero abierto. Las operaciones de escritura han de realizarse en el subproceso generado por la apertura del fichero.

Comentarios

Para grabar varias líneas en un fichero de texto podemos hacerlo de dos formas con este mismo comando de instrucción de proceso:

1) Un bucle for o un recorrer lista e ir grabando línea a línea.

2) Concatenar todo el texto a grabar en el fichero en una variable local del proceso y grabarlo una única vez con este comando de instrucción de proceso.

Es posible anidar operaciones de escritura en distintos ficheros, haciendo uso del manejador del fichero para seleccionar en aquél en el que queremos escribir.

Ejemplos

Abrimos el fichero c:\fichero.txt para grabar los registros seleccionados de la rejilla REJ.

Fichero: abrir ( fichero, "c:\fichero.txt", Lectura/escritura (Crea o limpia), OK_ABR, .Ninguno )
    Interfaz: procesar ( REJ, Seleccionadas )
        Rem ( Recorrer en modo "sólo lectura" la lista para la exportación )
        Recorrer lista sólo lectura
            Rem ( Grabar la línea con los campos de la rejilla )
            Fichero: grabar línea ( fichero, "" + rightJustified(#ID, 6, "0") + leftJustified(#NAME, 256, " "), OK, 0 )
            Rem ( El campo ID con longitud 6 ajustado a la derecha y rellenado con ceros a la izquierda, el nombre con 256 caracteres )

Abrimos el fichero c:\fichero.txt para grabar los registros seleccionados de la rejilla REJ pero, en lugar de grabar cada registro línea a línea, lo que haremos será concatenarlo todo en una variable local y grabar línea una única vez:

Fichero: abrir ( fichero, "c:\fichero.txt", Lectura/escritura (Crea o limpia), OK_ABR, .Ninguno )
    Interfaz: procesar ( REJ, Seleccionadas )
        Set (TEXTO, "")
        Rem ( Recorrer en modo "sólo lectura" la lista para la exportación )
        Recorrer lista sólo lectura
            Set ( TEXTO, TEXTO + "" + rightJustified(#ID, 6, "0") + leftJustified(#NAME, 256, " " + "\n")
            Rem ( El campo ID con longitud 6 ajustado a la derecha y rellenado con ceros a la izquierda, el nombre con 256 caracteres )
        Rem ( Grabar la línea con los campos de la rejilla )
        Fichero: grabar línea ( fichero, , OK, 1 )

Fichero: leer fichero

Comando de instrucción del grupo ficheros y directorios que lee el contenido completo del fichero seleccionado.

Origen de la instrucción: cualquiera.

Destino del subproceso: el mismo que el origen.

Parámetros

Manejador de fichero

Identificador del fichero que queremos leer. Este habrá sido establecido previamente dentro del mismo proceso mediante el comando de instrucción Fichero: abrir.

Identificador de variable local alfabética de retorno

El comando retornará en esta variable local el contenido completo del fichero.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Lee todo el contenido del fichero seleccionado. Esta operación de lectura han de realizarse en el subproceso generado por la apertura del fichero.

Comentarios

Es posible anidar operaciones de lectura en distintos ficheros, haciendo uso del manejador del fichero para seleccionar aquél del que queremos leer.

Ejemplo

Pedimos al usuario que nos indique un fichero de texto plano a leer y leemos su contenido:

Ventana de selección de fichero ( FICHERO, BOK, "*.txt *.csv *.xml", "" )
If ( BOK )
	Fichero: Abrir ( file, FICHERO, Solo lectura, BOK, .Ninguno )
		Fichero: Leer fichero ( file, SZ_TEXTO, BOK )

Fichero: leer línea

Comando de instrucción del grupo Ficheros y directorios que lee una línea en el fichero seleccionado.

Origen de la instrucción: cualquiera.

Destino del subproceso: el mismo que el origen.

Parámetros

Manejador de fichero

Identificador del fichero que queremos leer. Este habrá sido establecido previamente dentro del mismo proceso mediante el comando de instrucción Fichero: abrir.

Identificador de variable local alfabética de retorno

El comando retornará en esta variable local el dato leído en la línea.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Lee una línea del fichero abierto. Las operaciones de lectura han de realizarse en el subproceso generado por la apertura del fichero.

Comentarios

Las operaciones de lectura y escritura son secuenciales y se realizan línea a línea. Por tanto debemos hacer uso de un bucle por medio del comando For condicionado a la realización de la operación de lectura o escritura, para leer o escribir varias líneas.

Es posible anidar operaciones de lectura en distintos ficheros, haciendo uso del manejador del fichero para seleccionar aquél del que queremos leer.

En la versión de 32 bits no se podrán leer líneas cuyo tamaño supere los 128 Mb.

Ejemplo

Abrimos el fichero c:\fichero.txt para leer su primera linea llevando el contenido a la variable local LINEA.

Fichero: abrir ( fichero, “C:\fichero.txt”, Sólo lectura, OK_ABR, .Ninguno )
Fichero: leer línea ( fichero, LINEA, OK)

Get atributos fichero

Comando de instrucción del grupo Ficheros y directorios que informa de los atributos básicos de un fichero en disco.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda

Senda del fichero cuyos atributos básicos queremos conocer. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local fecha de retorno

Variable local en la que el comando retornará la fecha de última modificación del fichero.

Identificador de variable local hora de retorno (Opcional)

Variable local en la que el comando retornará la hora de última modificación del fichero.

Identificador de variable local numérica de retorno de tamaño en bytes (Opcional)

Variable local en la que el comando retornará el tamaño del fichero (bytes).

Funcionalidad

Informa de los atributos básicos de un fichero en disco: fecha y hora de última modificación del fichero y el tamaño en bytes.

Comentarios

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto no es necesario definir la senda completa.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Leemos de la caché del cliente el fichero original_copia_old.pdf guardando los valores de sus atributos en las variables locales correspondientes.

Get atributos del fichero ( sysCacheClientPath +"original_copia_old.pdf", FECHA, HORA, TAMAÑO )

Renombrar o mover fichero

Comando de instrucción del grupo Ficheros y directorios que renombra un fichero del disco.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda de origen

Senda del fichero que queremos renombrar. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Fórmula de senda de destino

Nueva senda de destino del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc.

Identificador de variable local booleana de retorno de ok (Opcional)

El comando retornará true (1) en esta variable local si ha podido realizar la operación o false (0) si no ha podido hacerlo.

Funcionalidad

Renombra un fichero en disco. El fichero será movido si la senda de destino es distinta a la senda de origen.

Comentarios

En ambas sendas se ha de definir el nombre del fichero.

Si tenemos establecido un directorio por defecto con el comando de instrucción Cambiar directorio por defecto no es necesario definir la senda completa.

Las sendas pueden estar definidas según el estilo de cualquiera de los sistemas operativos pero se han de tener en cuenta las diferencias en cuanto a la definición de la raíz del sistema.

Ejemplo

Renombramos el fichero original_copia.pdf de la caché del cliente por el nombre original_copia_old.pdf.

Renombrar o mover fichero ( sysCacheClientPath +"original_copia.pdf", sysCacheClientPath +"original_copia_old.pdf", OK )