LECTURA Y ESCRITURA DESDE ARCHIVOS (FILE) La estructura donde se guardan los datos de los programas se llama archivo (file) Un file consiste en varias líneas de datos relacionados que forman una unidad Cada línea de información en un file se llama record Cuando los records se leen ordenadamente (un record tras otro) se llama acceso secuencial cuando lo hacemos sin in orden especifico se llama acceso directo Sentencia de I/O Función OPEN Asociar un file en disco con un número de unidad CLOSE Finaliza la asociación del file y el número de unidad READ Leer datos del file asignado al número de unidad WRITE Imprimir datos en el file asignado al número de unidad REWIND Mueve al comienzo del file BACKSPASE Mueve hacia atrás un record en un file SENTENCIA OPEN Open → Asocia un file con un número de unidad. En general: OPEN(lista_ de_ clausulas ) Las 5 clausulas mas importantes son: 1. UNIT = → indica el numero de unidad de entrada salida asociada a un file tiliza un valor entero positivo 2. FILE= → nombre del archivo a ser abierto 3. STATUS = → puede ser uno de los siguientes: ´OLD’, ‘NEW’, ‘REPLACE’, ‘SCRATCH’ OR ‘UNKNOWN’ 4. ACTION= → indica si es un archivo para lectura, escritura o ambas. (READ, WRITE y READWRITE). Si no se pone nada se asume lectura y escritura. 5. IOSTAT= → nombre de un entero. Aclara si el archivo fue abierto correctamente o con error. Si no hay mensaje de error el valor es 0. Ej: Caso 1 El nombre del file es ‘ejemplo.dat’ yel número de unidad 8 INTEGER : : ierror OPEN(UNIT= 8, FILE = ‘ejemplo.dat’, STATUS = ‘OLD’, & ACTION = ‘READ’ , IOSTAT= ierror) ‘OLD’ → significa que el archivo ya existe. Si no existe IOSTAT manda un mensaje de error Caso 2 El nombre del archivo de salida SALDATOS en la unidad 25 INTEGER : : unit, ierror CHARACTER, (len=8) : : archivo archivo = ‘ SALDATOS’ unit = 25 OPEN(UNIT= unit, FILE= archivo, STATUS = ‘REPLACE’, & ACTION= ‘WRITE’, IOSTAT=ierror) ‘REPLACE’ quiere decir que un nuevo archivo será abierto para la salida exista o no un file con ese nombre. Si existe lo borra y crea un nuevo file para la salida. El contenido del viejo file se pierde. o OPEN(UNIT= unit, FILE= archivo, STATUS = ‘NEW’, & ACTION= ‘WRITE’, IOSTAT=ierror) Como el archivo esta declarado como ‘NEW’ si ya existe ierror saca un mensaje. Esto impide sobre imprimir un archivo. Caso 3 OPEN(UNIT= 12, STATUS = ‘SCRATCH’ , IOSTAT=ierror) ‘SCRATCH’ es un file temporario creado por el programa que se borra automáticamente cuando el programa termina. Notar que no se escribe el nombre del archivo (es un error escribirlo) Como no se puso ‘ACTION ‘ de este archivo se puede leer y escribir. SENTENCIA CLOSE Cierra el file y libera el número de unidad asociado al archivo. En general CLOSE(lista_ de_ clausulas ) CLOSE(UNIT= número entero) Si no se cierra el archivo cuando se termina el programa los archivos se cierran automáticamente. Cuando se cierra un file el número de unidad queda liberado para ser utilizado en la apertura de un nuevo archivo. Si se quiere reabrir el mismo archivo el número de unidad puede usarse el mismo número o cualquier otro. LECTURA Y ESCRITURA EN ARCHIVOS DE DISCO Por el OPEN se asocio un número a un archivo dentro del cual se puede leer y escribir usando esa relación: OPEN(UNIT=8, FILE=‘entra.dat’, STTUS=‘old’, IOSTAT=ierror) READ(8,*) x, y, z OPEN(UNIT=9, FILE=‘sal.dat’, STATUS=‘REPLACE’, IOSTAT=ierror) WRITE(9,100) x, y, z 100 FORMAT(‘ X = ’, F10.2.’ Y= ‘, F10.2, ‘ Z = ‘, F10.2) IOSTAT Toma la forma IOSTAT= var_entera En la lectura la var_entera toma el valor 0 si no existió ningún error. Si existió un error en el formato devuelve un número positivo Si encontró el fin de archivo , la variable devuelve un número negativo. Si no se conoce el fin de archivo y no existe la clausula IOSTAT cuando la lectura llega al final intenta leer el proximo registro y el programa se oborta. POSICIÓN EN EL FILE Un archivo secuencial tiene que ser leido registro por registro.para poder saltear registros en un archivo secuencial hay 2 sentencias: BACKSPACE mueve un record cada vez que es llamado REWID vuelve el file a su principio. BACKSPACE(UNIT=iunit) Y REWIND(UNIT=iunit) iunit es el número entero asociado a a la unidad. Ambas sentencias pueden incluir la clausula IOSTAT.