|
Puedes abrir, leer, escribir y cerrar archivos de texto ASCII mientras se analiza la escena. Esta característica se ha diseñado principalmente como ayuda para pasar información entre los fotogramas de una animación. Puedes escribir valores en un archivo, como la posición de un objeto, y leer esta información en el siguiente fotograma. Un claro uso de esta característica sería permitir que una escena de POV-Ray generara sus propios archivos de inclusión o también escribir escenas que se modifiquen a sí mismas. Creemos que los usuarios serán capaces de encontrar otros usos interesantes de esta característica.
Nota: Algunas versiones de POV-Ray para ciertas plataformas (p.ej. Windows), proveen de medios para restringir la capacidad de los archivos de escenas para leer y escribir ficheros.
El usuario puede abrir un archivo de texto usando la directiva #fopen
.
La sintaxis es la siguiente:
DIRECTIVA_FOPEN: #fopen IDENTIFICADOR "nombre_de_archivo" TIPO_DE_APERTURA TIPO_DE_APERTURA: read | write | append
Donde IDENTIFICADOR es un identificador no definido que se usará como manejador de archivo para hacer referencia al archivo, y "nombre_de_archivo"
es cualquier literal o expresión de cadena que especifica el nombre del
archivo. Los archivos abiertos con el tipo read
se abren sólo para lectura.
Aquéllos abiertos con write
generan un
archivo nuevo, con el nombre especificado, sobrescribiendo cualquier
archivo existente con el mismo nombre. Finalmente, los que se abren con
el tipo append
se abren para escritura, pero añadiendo el
texto al final del archivo existente con dicho nombre.
El manejador de archivo creado por #fopen
es siempre
global y permanece activo (y el archivo abierto) hasta que el análisis
de la escena ha finalizado, o hasta que uses #fclose
para
cerrar el archivo. Puedes usar #ifdef
IDENTIFICADOR_MANEJADOR_DE_ARCHIVO
para comprobar si un fichero está abierto.
Los archivos abiertos con la directiva #fopen
se
cierran automáticamente cuando finaliza el análisis de la escena. Sin
embargo, puedes cerrar un archivo usando en tu escena la directiva #fclose
.
La sintaxis es la siguiente:
DIRECTIVA_FCLOSE: #fclose IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO
Donde IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO es un fichero
previamente abierto con la directiva #fopen
. Mira la sección "La directiva #fopen".
Usando la Directiva #read, puedes leer cadenas, valores de coma flotante o matrices, directamente en variables de POV-Ray, desde un archivo de texto ASCII. El archivo debe ser abierto antes, en modo de lectura, usando la directiva #fopen. La sintaxis para la directiva #read es la siguiente:
DIRECTIVA_READ: #read( IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO, IDENTIFICADOR_DE_DATOS[,IDENTIFICADOR_DE_DATOS]...) IDENTIFICADOR_DE_DATOS: IDENTIFICADOR_SIN_DEFINIR | IDENTIFICADOR_DE_COMA_FLOTANTE | IDENTIFICADOR_DE_MATRIZ| IDENTIFICADOR_DE_CADENA
Donde IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO es el fichero previamente abierto. Le sigue uno o más IDENTIFICADORES_DE_DATOS separados por comas. Los paréntesis encerrando la lista de identificadores son necesarios. Un IDENTIFICADOR_DE_DATOS es cualquier identificador sin declarar o cualquier identificador de cadena, coma flotante o matrices previamente definidos. Los identificadores no declarados se crearán globales y del tipo determinado por los datos leídos. Los identificadores definidos previamente permanecen con el alcance global o local que tenían cuando fueron creados. Se realiza una comprobación del tipo de datos para asegurar que coincide con el de estos identificadores.
El formato de los datos que se leen debe consistir en series de literales válidos de cadena, coma flotante o matrices, separados por comas. Las expresiones o identificadores no están permitidos, aunque el signo menos y la notación exponencial están permitidos en los valores de coma flotante.
Si intentas leer pasado el fin de archivo, éste se cierra
automáticamente, y se borra el IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO
de la tabla de símbolos. Ello significa que la función boleana
defined(
IDENTIFIER)
puede usarse para
detectar el final del archivo. Por ejemplo:
#fopen MiArchivo "misdatos.txt" read #while (defined(MiArchivo)) #read (MiArchivo,Var1,Var2,Var3) ... #end
Puedes escribir cadenas, valores de coma flotante o vectores,
almacenados en variables POV-Ray, sobre un archivo de texto ASCII plano
usando la directiva #write
. El archivo debe ser primero
abierto en modo de escritura (write) o en modo de adición (append)
usando la directiva #fopen
. La sintaxis de la directiva #write
es la siguiente:
DIRECTIVA_WRITE: #write( IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO, ITEM_DE_DATOS[,ITEM_DE_DATOS]...) ITEM_DE_DATOS: COMA_FLOTANTE | MATRIZ | CADENA
Donde IDENTIFICADOR_DEL_MANEJADOR_DE_ARCHIVO es el archivo
previamente abierto. Le siguen uno o más ITEM_DE_DATOS separados
por comas. Los paréntesis encerrando la lista de identificadores son
necesarios. Un ITEM_DE_DATOS es cualquier expresión válida de
cadenas, coma flotante o vectores. Las expresiones de coma flotante se
evalúan y escriben como literales de coma flotante con signo. Si
necesitas control sobre el formato, debes usar la función str(VALUE,L,P)
para convertirla en una cadena formateada. Mira la sección "Funciones de Cadena" para más
detalles acerca de la función str
. Las expresiones
de vectores se evalúan como tres constantes de coma flotante con signo,
y se escriben encerrados entre los signos "<" y "" y separados por
comas (la notación de vector habitual en POV-Ray). Las expresiones de
cadenas se evalúan y escriben tal como se han especificado.
Observa que aunque los datos leídos por la directiva #read
deben estar delimitados por comas y con comillas encerrando los datos de
cadena, la directiva #write
no escribe
automáticamente comas ni comillas.
Por ejemplo, la siguiente directiva #read
lee
una cadena, un valor de coma flotante y una matriz:
#read (MiArchivo,MiCadena,MiFlotante,MiMatriz)
Este código espera leer algo parecido a:
"Una cadena delimitada por comillas", -123.45, <1,2,-3>
El código POV-Ray para escribir esto sería:
#declare Val1 = -123.45; #declare Vect1 = <1,2,-3>; #write(MiArchivo,"\"El código POV-Ray para escribir esto sería:\",",Val1,",",Vect1,"\n")
Mira las secciones "Literales de Cadena" y "Formato de Texto" para más detalles sobre cómo escribir caracteres especiales como comillas, retorno de carro, etc...
|