Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cap9 Fortran PDF
Cap9 Fortran PDF
Contenido:
Pregunta Gua
131
Sesin Presencial:
Introduccin a archivos.
Fundamentos En el sistema de entradas y salidas, los datos son almacenados y
transferidos a travs de archivos. Todas las fuentes y destinos de datos son
considerados como archivos. La pantalla, el teclado y la impresora son archivos
externos, as como archivos almacenados en disco. Cualquier archivo es
asociado con un manejador lgico.
El manejador lgico es especificado en el parmetro conocido como unidad
lgica UNIT.
Para el manejo de archivos existen seis comandos bsicos a saber:
Comando Descripcin
Open Apertura de un archivo de entrada y/o salida con numero de
unidad especial
Close Cierre de un archivo de entrada y/o salida con numero de
unidad especial
Read Lectura de datos de un archivo de entrada y/o salida con
numero de unidad especial
Write Escritura de un archivo de entrada y/o salida con numero de
unidad especial
Rewind Posiciona el control de acceso al inicio de un archivo.
BackSpace Retrocede el control de acceso al registro anterior.
Ud Lgica Descripcin
0 Se predetermina como pantalla o como teclado
5 Se predetermina como teclado.
6 Se predetermina como pantalla.
* (asterisco) Siempre representa la pantalla y el teclado.
Ejemplo:
--
--
WRITE (0,1)
1 FORMAT (DAME UN VALOR DE X)
READ (5,2) X
2 FORMAT (F5.1)
WRITE (6,3) X
3 FORMAT (I5, F5.1, /)
--
--
132
Descripcin de comandos bsicos.
Sintaxis
OPEN([UNIT=] unidad [, ACCESS=acceso] [ACTION=accin]
[, BLANK= blancos] [, BLOCKSIZE= Tamao del bloque]
[, CARRIAGECONTROL= control de carro] [, DELIM= lmite]
[, ERR=error] [, FILE= Archivo] [, FORM= forma]
[, IOFOCUS= Punto Lgico Entrada/Salida] [, IOSTAT= Edo de entrada/Salida]
[, PAD=Blancos]
[, POSITION= posicin] [, RECL= rellamada] [, SHARE= Compartido]
[, STATUS= Estado])
Si UNIT= es omitida, unitspec debe de ser el primer parmetro. En otro caso los
parmetros pueden aparecer en cualquier orden.
unit
Entero que especifica el nmero de la unidad externa. Debe ser mayor que 0
.
access
Modo de acceso para el archivo. Uno de APPEND, DIRECT,
SEQUENTIAL (Por Omisin, en forma automtica).
action
Que accin se pretende realizar dentro del archivo. Puede ser:
READ (el proceso es solo leer el archivo),
WRITE (se pretende solo escribir en el archivo), o
READWRITE (se pretende realizar las dos acciones leer y escribir).
Si action es omitida, se trata primero con READWRITE, Si esta falla, se trata
de usar READ, y en el ltimo caso se trata de usar WRITE.
blanks
Character*(*). Controla la interpretacin de los blancos en I/O formateada.
blocksize
Tamao del buffer interno de la unidad en bytes.
carriage control
Indica como se debe interpretar el primer carcter de los registros formateados.
delim
Forma de delimitar los registros delimitados. Puede ser APOSTROFES,
CUOTA, o NADA (Automticamente)
133
err
Etiqueta de una instruccin ejecutable en el mismo programa.
file
Nombre del archivo que se desea abrir. El estatuto OPEN con espacios en
blanco como nombre de archivo, propicia a que se abran varios archivos al
mismo tiempo.
form
Determina la forma de apertura puede ser FORMATEADO SIN FORMATO,
o BINARIO.
Para acceso secuencial en forma automtica es FORMATED; para acceso
directo forma automtica es UNFORMATED.
Iofocus
Valor lgico para indicar si una ventana de una aplicacin est activa es :
QuickWin ( Ventana Rpida),
iostat
(Salida) Entero que define si existe o no errores en la instruccin. Cero no
ocurri error, un valor negativo si se encontr el fin del archivo o el nmero de
mensaje de error.
pad
Especificacin de si los registros formateados son o no rellenados con blancos al
momento de la lectura. Valores vlidos son YES( en forma automtica ) o NO.
position
Indica la posicin de inicio dentro del archivo. Puede ser ASIS (En forma
automtica), REWIND, o APPEND. Si es REWIND, un archivo existente se
posiciona en el principio. Si es APPEND, en un archivo existente el apuntador
de registro se mueve hasta el final. Si es ASIS, la posicin en un archivo
conectado no cambia, mientras que en un archivo desconectado la posicin ser
hasta el principio.
recl
Tamao del registro en bytes para archivos de acceso directo, o el mximo
tamao para archivos secuenciales. Este parmetro es necesario para archivos
de acceso directo.
share
Cadena que define como se comparte un archivo.
DENYRW modo Deny-Read/write. Ningn otro proceso puede abrir el archivo.
DENYWR modo Deny-write. Ningn otro proceso puede escribir en el archivo.
DENYRD modo Deny-Read. Ningn otro proceso puede abrir el archivo para
leerlo.
134
DENYNONE modo Deny-None (en forma automtica). Cualquier proceso
puede abrir el archivo.
status
Cadena que describe la naturaleza del archivo a ser abierto:
OLD El archivo debe existir. Si existe, se abre. Si no existe, ocurre un error de
entrada salida, que dice Archivo In-existente.
NEW El archivo no debe existir. Si no existe el archivo es creado. Si existe,
entonces genera un error que dice Archivo ya existente .
Sintaxis
CLOSE([UNIT=]unitspec [, ERR=errlabel] [, IOSTAT=iostat] [, STATUS=status])
unitspec
Especfica una unidad externa (Entrada) Integer. No sucede ningn error si la
unidad se encuentra cerrada, pero si esta abierta, genera un de error.
enlabel
La etiqueta de una instruccin ejecutable en el mismo cdigo del programa o
modulo. Si se especifica se transfiere el control a esa instruccin.
Iostat (Salida) de tipo Entero. Esto si no ocurre error; en otro caso, el nmero
del error de corrida.
status
Expresin (Entrada) tipo Character*(*). que evala a KEEP (Guardar)
DELETE ( Borrar). El predeterminado es KEEP.
Explicacin
135
Cerrar la unidad 0 automticamente reconecta la unidad 0 con el teclado y la
pantalla. Cerrar las unidades 5 y 6 automticamente de reconectan con el
teclado y la pantalla, respectivamente. No se puede cerrar la unidad asterisco
(*).
Ejemplo:
El siguiente ejemplo escribe en la unidad preconectada 6, luego se
reconecta con un archivo externo COSENOS y se escribe en l, y
finalmente se reconecta a la pantalla.
PROGRAM ARCHIVOS
-----------------------
-----------------------
REAL :: TETA, ANGULO
ESCRIBE EN LA PANTALLA (UNIDAD PRECONECTADA 6).
WRITE(6, (ESTA ES LA UNIDAD 6))
!USO DE LA INSTRUCCIN OPEN PARA CONECTAR LA UNIDAD 6 A UN ARCHIVO
!EXTERNO LLAMADO SENOS
OPEN (UNIT= 6, FILE= SENOS, STATUS= NEW)
DO TETA=0.1, 6.3, 0.1
ANGULO= COS(TETA)
!ESCRIBIR EN EL ARCHIVO SENOS.
WRITE (6, 100) TETA, ANGULO
100 FORMAT (F3.1, F5.2)
END DO
!CERRARLO.
CLOSE (6)
!RECONECTAR UNIDAD 6 CON LA PANTALLA, Y ESCRIBIR EN ELLA.
WRITE (6, (SENOS COMPLETOS))
END PROGRAM ARCHIVOS
Sintaxis
READ {{fmt, nml}([UNIT=]unidad [. {[FMT=]FMT[NML=]nml}]
[, ADVANCE= avance] [, END=fin] [,EOR=error] [,ERR=error]
[, IOSTAT=estado de la ud de entrada/salida] [, REC= registro]
[, SIZE=size])}iolist
fmt Definicin del formato. Puede ser el nmero de etiqueta de una instruccin
FORMAT: una expresin de carcter; asterisco (*) para lectura directa*) unit (El
Teclado).
136
advance
Indica si el apuntador de registro avanza o no. Los valores posibles son YES
(Por omisin) NO.
End Etiqueta de alguna instruccin a ejecutar para cuando se llega al fin del
Archivo.
Err Etiqueta de alguna instruccin a ejecutar para cuando suceda algn error
De entrada y/ salida.
iostat
Valor del error encontrado (Salida).
A) Cero no existe error,
B) -1 se encontr el fin del archivo
C) # nmero del mensaje de error.
rec
Nmero de registro solo para archivos de acceso directo. El primer registro en el
archivo es el nmero 1.
Iolist Una o mas entidades sobre las que se transferirn los datos del archivo.
Ejemplo :
DIMENSION IA(10,20)
!LEER LOS VALORES DENTRO DE UN ARREGLO.
!LA LECTURA EN EL ARREGLO ESTA ITERADA DENTRO DE UN ESTATUTO DO Y ES UNA
!LISTA DE ENTRADA CON FORMATO DE 8 COLUMNAS DE 5 DGITOS C/U.
READ (6, 990) N1, N2, ((IA(I, J), J=1, N2), I=1, N1)
990 FORMAT (2I5, / , (8I5))
!LECTURA CON LISTA-DIRECTA SIN USAR UN FORMATO ESPECFICO
REAL X,Y
INTEGER I, J
READ(*,*) X, Y, I, J
137
Iolist Esta lista es un conjunto de expresiones separadas por comas que
proporcionaran los valores a transferir al archivo
Err Etiqueta dentro del programa para ejecutar una instruccin cuando suceda
algn error.
Iostat (Salida) Integer. Cero si la reposicin sucede; en otro caso, el nmero del
error.
Ejemplo
WRITE (7, (500)) matricula
REWIND (7)
READ (7, (500)) matricula
Sintaxis
BACKSPACE {unitspec([UNIT=]unidadespecifica [, ERR=etiqueta de error]
[, IOSTAT=error])}
La explicacin de los parmetros es idntica a los del OPEN.
La instruccin BACKSPACE regresa un registro en el archivo, excepto en los
La primera posicin de un registro, exceptuando los casos siguientes:
CASO RESULTADO
No existe registro precedente La posicin del archivo no ser
cambiada
La posicin del archivo est en la El archivo es posicionado en el
mitad de un registro principio de este registro.
El registro precedente es el fin del El archivo es posicionado
archivo. inmediatamente antes del fin de
archivo.
138
Ejemplo
BACKSPACE 8
BACKSPACE (8)
BACKSPACE unidad1
BACKSPACE (UNIT=unitdad1, ERR= 500, IOSTAT=error)
Ntese WRITE debe de ser usado en conjunto con una unidad numrica. Este
es un estatuto mas general que PRINT. El PRINT es un comando simple, a
diferencia del WRITE que puede asignar un formato.
Con frecuencia vemos conflictos a la hora de imprimir en Fortran 90-95, pues las
direcciones lgicas no corresponden a la fsicas y esto, es debido porque al
instalar el sistema operativo en forma automtica; generar direcciones lgicas
para evitar conflictos de requerimientos de memoria, de acuerdo a las
caractersticas con las que cuente cada equipo de cmputo y tambin se efecta
en forma distinta segn el Windows tales como el 95, 95 Vs1, 98, 98 Se, 2000,
2000 Nt, Me, Xp, etc. Para solucionar tanta diferencia tendramos que acceder al
estado real de instalacin fsico/lgica a travs del rea avanzada de instalacin
personalizada, lo cual implica apoyo de un experto en computacin.
Hay ocasiones en que el equipo cmputo del tipo personal, las direcciones
Tanto lgicas como fsicas, correspondan las solicitadas en el lenguaje Fortran
90-95 como es el caso de ,muchos equipos con Windows 95, 98 se, y Xp.
NOTA Para Todo comando Open debe haber un comando Close al finalizar la
accin. (Ver programas resueltos desde la pgina 129 a la 132 )
139
Ejemplos
Program impresora
--
--
OPEN (UNIT = 15, FILE = LPT1)
WRITE (15,500) MATRICULA, NOMBRE, PROMEDIO
500 FORMAT (T10, I8, 5X, A30, 5X, F7.2,/)
--
CLOSE
Otra forma:
WRITE (LPT1 , 500) MATRICULA, NOMBRE, PROMEDIO
Tambin:
OPEN (UNIT = 6, FILE = PRN)
WRITE (7,500) MATRICULA, NOMBRE, PROMEDIO
Nota:
Para la grabacin en algn medio magntico, si se desea grabar en puerto USB,
disco flexible, rgido, etc., es necesario conocer el nmero fsico y/o lgico
asignado, esto lo puede conocer por medio del instalador avanzado que se
encuentra dentro del sistema operativo instalado en su equipo, donde se
localizan las direcciones del mismo.
140
NOTA:
Existe una tabla de errores que se otorga en el manual en la compra del paquete Forran 90-95.
Program Lectura
OPEN(1,file=alumnos.txt)
READ(1,*) matr, nom, esp
PRINT*, matr, nom, esp
END Program Lectura
**
La instruccin OPEN conecta la unidad nmero uno con el archivo externo
datos. txt.
Program NumDesc
INTEGER, PARAMETER :: MAX=100
REAL, DIMENSION(MAX)::X
OPEN(1, FILE= DATA)
READ (1, *, IOSTAT=10) (X(1), I=1, MAX)
IF (10 < 0 ) THEN
N=I+1
ELSE
N= MAX
END IF
WRITE(*,*) (X(1), I=1, N)
End Program NumDesc
Los datos deben de ser arrancados en cualquier formato del archivo insertado.
Ntese que I es una unidad ms grande que el nmero de valores ledos: este
es incrementado en el CICLO implicado antes del fin del archivo la condicin de
archivo es fcilmente detectada.
141
Elaborar un programa que calcule la curva de mnimos cuadrados y su
intercepcin con el eje de las Equis.
PROGRAM MINIMOS_CUADRADOS
! COMENTARIOS
IMPLICIT NONE UNIDAD LOGICA DONDE SE ENCUENTRE EL ARCHIVO
INTEGER PARAMETER :: UL = 18
CHARACTER ( LEN = 24 ) :: NOMBRE_ARCHIVO
INTEGER :: ERROR
INTEGER :: N = 0
REAL :: MEDIA, SX, SX2, SXY, SY
REAL :: X, Y, MX, MY, INT_Y
WRITE ( * , 1000 ) DIRECCION A DONDE INDICA COMO VAMOS A ESCRIBIR
1000 FORMAT (X, ESTE ES..., / , X , DAME EL CONJUNTO..., /, X ,DE UN ARCHIVO QUE
& CONTIENE ( X, Y ), / )
READ ( * , (A) ) NOMBRE_ARCHIVO ABORTA EL ARCHIVO POR SER =0
OPEN ( UNIT_UL, FILE NOM_ARCHIVO, STATUS = OLD , ACTION = READ IOSTAT = &
ERROR )
REVISAR ERROR: IF ( ERROR = 0 ) THEN
WRITE ( * , 1020 ) NOMBRE_ARCHIVO
1020 FORMAT ( X, ERROR EN ARCHIVO, A,NO EXISTE )
ELSE
ALFABETICO: DO
READ ( UL, *, IOSTATE = ERROR ) X, Y
IF ( ERROR / = 0 ) EXIT
N=N+1
SX = SX + X
SY = SY + Y
SXY = SXY + X * Y
SX2 = SX2 + X * * 2
END DO ALFABETICO
MX = SX / REAL ( N ) SE MARCA REAL POR QUE N ESTA DECLARADA ENTERA
MY = SY / REAL ( N )
MEDIA = ( SXY SX * MY ) / ( SX2 SX * MX ) FORMULA CODIFICADA
INT_Y = MY_MEDIA * MX
WRITE ( * , 1030 ) MEDIA, INT_Y, N
1030 FORMAT ( 0, COEFICIENTES DE REGRESION DE LA RECTA DE MINIMOS
CUADRADOS, / , X , MEDIA =, F12.3, /, X, NUMEROS DE PUNTOS =, I12 )
CLOSE ( UNIT = UL )
END IF REVISA ERROR
END PROGRAM MINIMOS CUADRADOS
142
Evidencia integradora para el aprendizaje:
9.1.- Qu es un archivo?
9.2.- En Fortran 90-95 Cmo se describen sus dispositivos de entrada, salida
y/o almacenamiento?
9.3.- Qu es una unidad lgica?
9.4.- Cules son los comandos bsicos para el manejo de archivos en Fortran?
9.5.- Describa detenidamente el comando de apertura Open para Fortran
9.6.- Describa detenidamente el comando de cierre Close para Fortran 90-95.
9.7.- Describa detenidamente el comando de lectura Read para Fortran 90-95.
9.8.- Describa detenidamente el comando de escritura Write para Fortran
9.9.- Describa detenidamente el comando de reinicio Rewind para Fortran
9.10.- Describa detenidamente el comando de retroceso BackSpace de
Fortran 90-95
9.11.- Elabore un programa con todos y cada uno de los pasos sugeridos para
una programacin exitosa. Que De acuerdo con el problema Archivo de
Alumnos descrito en los ejercicios de los captulos anteriores, con Promedio,
rediselo de tal forma que se cree un archivo en disco.
143