Ejemplo de cómo usar el IOSTAT par a detectar el fin de archivo
1
2
3
Hacer in programa que lea un número desconocido de datos reales de un
disco y detecte el final de los datos en el archivo
Definir entradas y salidas
a) nombre del file a ser abierto
b) datos contenidos en el file
Describir el algoritmo
Recordar:
IOSTAT= ierror
En la lectura ierror 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.
comenzar
lee valor
Nvals ← 0
Ierror
== 0
si
Lee nombre
del archivo
no
Nvals = nvals+1
Abre
archivo
Escribir
nvals, valor
si
Ierror
==0
no
Escribe error de
apertura de file
Imp: Error en la
línea
si
Ierror>0
no
stop
Imp: Terminó el archivo, nvals
4. Escribir el algoritmo en lenguaje FORTRAN
PROGRAM lectura
!
! Proposito: Ver como funciona IOSTAT para encontrar errores
!
IMPLICIT NONE
! Diccionario e inicialización
CHARACTER (len=20) : : archi
! Nombre del archivo
INTEGER : : nvals = 0
! Número de valores
INTEGER : :ierror
! Valor del IOSTAT
REAL : : valor
! Valores leídos
!
WRITE(*;*) ‘Entra el nombre del archivo’
READ (*,*) archi
WRITE(*,*) ‘ El archivo es:’, archi
!
! Se abre el archivo y se ven los errores
OPEN(UNIT= 3, FILE=archi, STATUS=‘OLD’, ACTION= ‘READ’,
IOSTAT=ierror)
if1 IF( ierror ==0) THEN
DO
READ(3, *, IOSTAT = ierror) valor
IF(ierror /= 0) EXIT
nvals= nvals + 1
WRITE( *, 1010) nvals, valor
1010 FORMAT(‘ ‘, ‘registro ‘, nvals, ‘ valor’, F10.4)
END DO
if2 IF( ierror > 0) THEN
WRITE(*, 1020) nvals+1
1020 FORMAT (‘0’, ‘ Hay un error en la lectura en el registro ‘, I6)
ELSE
WRITE(*,1030) nvals
1030 FORMAT( ‘0’, ‘Llegó al fin de archivo . Hay ‘, I6, ‘registros’)
END IF if2
ELSE if1
WRITE(*,1040) ierror
1040 FORMAT (‘ ‘, ‘ Error en la apertura del file: ‘, I6)
END IF if1
CLOSE(UNIT=3)
END PROGRAM lectura
5. Verificación del programa
Para verificar el programa vamos a usar 2 archivos. Uno de ellos con un error en
los datos
arch1
arch2
-17.0
-17.0
30.001
30.001
1.0
AAAA
12000
12000
-0.012
-0.012
Los resultados:
*******************************************
Entra el nombre del archivo
‘arch1’
El archivo es: arch1
registro 1 valor
-17.0000
registro 2 valor
30.0010
registro 3 valor
1.0000
registro 4 valor 12000.0000
registro 5 valor
0.0120
Llegó al fin de archivo . Hay 5 registros
Entra el nombre del archivo
‘arch2’
El archivo es: arch2
registro 1 valor
-17.0000
registro 2 valor
30.0010
Hay un error en la lectura en el registro 3
************************************************
Finalmente si hay un error en el archivo
*************************************************
Entra el nombre del archivo
‘aarch2’
El archivo es: aarch2
Error en la apertura del file:
29
Descargar

Diapositiva 1