archivo  Un file consiste en varias líneas de datos relacionados... Cada línea de información en un file se llama record (file)

Anuncio
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.
Descargar