1hacer in programa que lea un número desconocido de datos reales de un disco y detecte el final de...
TRANSCRIPT
1 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
2 Definir entradas y salidasa) nombre del file a ser abiertob) datos contenidos en el file
3 Describir el algoritmo
Ejemplo de cómo usar el IOSTAT par a detectar el fin de archivo
Recordar:IOSTAT= ierrorEn 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
Nvals ← 0
Lee nombre del archivo
Abre archivo
lee valor
Ierror == 0
Ierror ==0
Escribe error de apertura de file
no
Nvals = nvals+1
Escribir nvals, valor
si
Ierror>0
no
Imp: Terminó el archivo, nvals
Imp: Error en la línea
stop
no
si
si
4. Escribir el algoritmo en lenguaje FORTRAN
PROGRAM lectura!! Proposito: Ver como funciona IOSTAT para encontrar errores!IMPLICIT NONE! Diccionario e inicializaciónCHARACTER (len=20) : : archi ! Nombre del archivoINTEGER : : nvals = 0 ! Número de valoresINTEGER : :ierror ! Valor del IOSTAT REAL : : valor ! Valores leídos!WRITE(*;*) ‘Entra el nombre del archivo’READ (*,*) archiWRITE(*,*) ‘ El archivo es:’, archi!! Se abre el archivo y se ven los erroresOPEN(UNIT= 3, FILE=archi, STATUS=‘OLD’, ACTION= ‘READ’, IOSTAT=ierror)
if1 IF( ierror ==0) THENDO 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) THENWRITE(*, 1020) nvals+1 1020 FORMAT (‘0’, ‘ Hay un error en la lectura en el registro ‘, I6)ELSE WRITE(*,1030) nvals1030 FORMAT( ‘0’, ‘Llegó al fin de archivo . Hay ‘, I6, ‘registros’)END IF if2
ELSE if1WRITE(*,1040) ierror1040 FORMAT (‘ ‘, ‘ Error en la apertura del file: ‘, I6)END IF if1CLOSE(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
-17.0
30.001
1.0
12000
-0.012
arch2
-17.0
30.001
AAAA
12000
-0.012
Los resultados:*******************************************Entra el nombre del archivo‘arch1’El archivo es: arch1registro 1 valor -17.0000registro 2 valor 30.0010registro 3 valor 1.0000registro 4 valor 12000.0000registro 5 valor 0.0120Llegó al fin de archivo . Hay 5 registros
Entra el nombre del archivo‘arch2’El archivo es: arch2registro 1 valor -17.0000registro 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: aarch2Error en la apertura del file: 29