Curso de Fortran - Ficheros

9 - Ficheros

[editar]
Curso gratis creado por Anónimo.
04 de Noviembre de 2005
ESTRUCTURA DE UN FICHERO

-Un fichero es una colección de datos organizados de alguna manera y
 almacenados generalmente en disco o cinta.

-Un fichero está formado por registros y estos constan de campos que
 pueden ser numéricos o de caracteres.

-Los ficheros formateados pueden ser editados, imprimirse o visualizarse
 mientras que los ficheros no formateados no pueden hacer esas acciones.
 Aunque la lectura y la escritura son más rápidas y ocupan poca memoria.

ORGANIZACION DE FICHEROS

-Se consideran dos tipos de acceso a los registros de un fichero que
 son los siguientes:

-Acceso Secuencial.
 -Acceso Directo.

-El acceso Secuencial implica el acceso a un fichero según el orden de
 almacenamiento de sus registros, uno a uno.

-El acceso Directo implica situarse en un registro determinado sin que
 ello implique la consulta de los registros precedentes.

-La Organización de un fichero define la forma en que los registros se
 disponen sobre el soporte de almacenamiento:

-Organización Secuencial.
 -Organización Directa.
 -Organización Indexada.

-Un fichero con organización Secuencial es una sucesión de registros
 almacenados consecutivamente sobre un soporte externo de tal modo que
 para acceder al registro n, necesariamente hay que pasar por los n-1
 registros precedentes.

-Un fichero con organización Directa exige soporte direccionable. Cada
 posición se localiza por su dirección absoluta, que en el caso del
 disco suele venir definida por número de pista y de sector.

-El lenguaje Fortran no es muy fuerte es la manipulación de archivos
 aunque tiene capacidad para manipularlos.

-Los archivos suelen ser pequeños y la información a tratar suele estar
 en sentencias DATA.

APERTURA DE UN FICHERO. SENTENCIA "OPEN".

-Esta sentencia es la encargada de la apertura de un fichero, conectando
 un fichero a un número de Unidad, de forma que para referirse después
 al fichero se hará con el número de Unidad establecido en la apertura.

-Cuando se quiere crear un fichero en un programa se utilizará la
 sentencia OPEN para que quede en una Unidad.

-La sentencia OPEN también es usada para declarar las propiedades del
 fichero, si es Secuencial o Directo, si es Formateado o no Formateado
 y otras propiedades.

-La sintaxis de la sentencia será la siguiente:

-OPEN ( UNIT= N,  FILE='Nombre' ,  ACCESS=Tipo ,  FORM=Formato ,
   STATUS=Estado ,  IOSTAT=N ,  ERR=Etiqueta ,  BLANK=Tipo , 
        RECL=N ,  BLOCKSIZE=N , MODE=Tipo ).

-La sentencia OPEN es la primera sentencia que debe aparecer al utilizar
 un fichero.

-La opción UNIT siempre debe figurar en la sentencia OPEN y se podrá
 omitir, en cuyo caso N deberá figurar como primer parámetro.
Esta opción se encarga de asignar un canal de comunicación para
 ejecutar el archivo.
-La opción FILE indica el nombre del fichero que va a estar conectado a
 la unidad N. Si no se coloca el nombre del fichero se podrá pasar por
 parámetro el nombre de dicho fichero.

-La opción ACCESS, donde Tipo es una expresión de tipo carácter e indica
 el tipo de fichero que se va a utilizar, siendo por defecto Secuencial
 y puediendo tomar los valores:

-SEQUENTIAL.
 -DIRECT.

-La opción FORM, donde Formato es una expresión de tipo carácter en que
 el valor por defecto es Secuencial, asigna un formato al fichero,
 siendo los valores que puede tomar:

-FORMATTED.
 -UNFORMATTED.
 -BINARY.

-Si la opción es omitida OPEN asumirá FORMATTED si el fichero es de tipo
 Secuencial y UNFORMATTED si es un fichero Directo. BINARY se utiliza en
 Fortran 90 y representa a los ficheros binarios.

-La opción STATUS, donde Estado es una expresión de tipo carácter y se
 usa para saber si el fichero ya existe o es nuevo y por tanto va a ser
 creado. Sus opciones son las siguientes:

-OLD (Si el fichero existe, sino produce error).
 -NEW (Crea el nuevo fichero y FILE no debe existir en la Unidad).
 -SCRATCH (Si crea un fichero temporal y no debe darse nombre al
  fichero).
 -UNKNOWN (Si no se sabe si existe o no el fichero siendo la opción
  por defecto).

-Un fichero SCRATCH desaparece cuando se cierra la Unidad o cuando
 termina la ejecución.

-La opción IOSTAT, donde N es un identificador de una variable entera.
 Almacena un código numérico de cómo se ejecuta la sentencia OPEN. Si
 OPEN se ejecuta sin error se almacena un cero en N.

-La opción ERR, donde Etiqueta es la sentencia donde se bifurca
 incondicionalmente si el fichero no puede ser abierto al producirse un
 error.

-La opción BLANK, donde Tipo es una expresión de tipo carácter que
 puede tomar los siguientes valores:

-NULL (Los blancos son ignorados y es opción por defecto).
 -ZERO (Los blancos son interpretados como ceros).

-Esta opción se usa para especificar la interpretación de los espacios
 en blanco en los datos de entrada.

-La opción RECL, donde N es una expresión entera, indica la longitud
 en caracteres de los registros en un fichero de acceso Directo. Sólo
 debe aparecer en los ficheros Directos.

-La opción BLOCKSIZE, donde N es un número entero, asigna un tamaño al
 buffer de lectura intermedio.

-La opción MODE, donde Tipo es una cadena de caracteres, es el modo de
 apertura del fichero. La opción por defecto es la de lectura escritura
 siendo las opciones:

-READ.
 -WRITE.
 -READWRITE.

-Todas las opciones son opcionales excepto UNIT que es obligatorio, y si
 el fichero es de acceso Directo es obligatorio especificar RECL.

ESCRITURA DE UN FICHERO SECUENCIAL.

-Consiste en transferir información desde la memoria principal al
 soporte externo donde está el fichero.

-Para escribir en un fichero Secuencial se usa WRITE especificando la
 Unidad a la que está conectada el fichero indicando que el fichero es
 Secuencial.

-La sentencia de escritura tiene la siguiente sintaxis:

-WRITE ( UNIT= N ,  FORM=Formato ,  ERR=Etiqueta , IOSTAT=N ,
        ENDFILE=Unidad ).

-La única opción obligatoria sería UNIT, todas las demás han quedado
 explicadas.

-Al crear un fichero los registros se escriben uno a continuación del
 otro, escribiendo un registro especial EOF al final de los datos
 escritos.

-Normalmente con CLOSE el registro EOF es automáticamente escrito al
 cerrar el fichero, aunque se puede usar la siguiente sentencia:

-ENDFILE N.
 -ENDFILE ( UNIT= N ,  ERR=Etiqueta ,  IOSTAT=N ).

-Donde N es el número de la Unidad a la que se conectó el fichero
 Secuencial. La sintaxis más empleada es la primera. Todas las demás
 opciones ya han quedado explicadas.

-Si se ejecuta ENDFILE, el nombre de la Unidad a la que está conectado
 un fichero nuevo, sin datos, creará un fichero vacío.

SENTENCIA DE CIERRE DE UN FICHERO "CLOSE".

-Esta sentencia rompe la conexión de un fichero con la Unidad a la que
 se conectó un OPEN siendo su sintaxis:

-CLOSE ( UNIT= N ,  STATUS=Tipo ,  IOSTAT=N ,  ERR=Etiqueta ).

-La opción UNIT, siendo N un entero, es el número de la Unidad donde
 se encuentra el fichero que se va a desconectar y puede omitirse, en
 cuyo caso, será el primer parámetro de CLOSE.

-La opción STATUS, siendo Tipo una expresión tipo carácter indica el
 estado del fichero en ese momento, puediendo tener los valores:

-KEEP (El fichero se guarda después de ser cerrado).

-DELETE (El fichero es borrado perdiéndose después del cierre).

-Por defecto toma el valor KEEP, excepto para los ficheros que son de
 tipo SCRATCH.

-Los posibles valores que se pueden sacar de las opciones FORM y ACCESS
 son los siguientes:

-Registros Secuencial-Formateados.
 -Registros Secuencial-No formateados.
 -Registros Directo-Formateados.
 -Registros Directo-No formateados.
 -Registros Binario-Formateado.
 -Registros Binario-No formateado.

-Los registros de tipo Secuencial-Formateados se almacenan en código
 ASCII y permiten verse con cualquier editor de texto y manipularlos.

-Si tenemos las siguientes instrucciones:

-VarI=4
  OPEN (33, FILE='FSEQ')
  WRITE (33, '(A, I3)') 'RECORD', I/3
  WRITE (33, 'C3')
  WRITE (33, '(11H El Reg-N3)')
  CLOSE (33)

-La salida que dará este ejemplo serán tres segmentos de longitud
 variable cuya estructura de registros será la siguiente:

-Se puede observar como después de la primera marca de fichero OA, el
 segundo registro no aparece por ser de 0 bytes, mientras que el primero
 tendrá 9 bytes y el tercero tendrá 11 bytes.

-Los registros de tipo Secuencial-No formateados tienen longitud
 variable y no están en código ASCII, sino otro código que lo introduce
 el programa y lo organiza en bloques físicos de 128 bytes como máximo.

-Si tenemos las siguientes instrucciones:

-CHARACTER Array (3)
  INTEGER *4 Datos (35)
  DATA Datos /35*-1/, Array / 'X', 'Y', 'Z'/
  OPEN (33, FILE='UFSEQ', FORM='UNFORMATTED')
  WRITE (33) Datos
  WRITE (33) Array
  CLOSE (33)

-La salida que dará este ejemplo será la siguiente:

-Como el bloque tiene un tamaño máximo de 128 bytes por registro, al
 sacar todos los elementos del Array Datos (Que necesitará 140 bytes)
 se particiona en dos registros uno de 128 bytes y otro de 12 bytes.

-Los registros de tipo Directo-Formateados tienen la misma longitud,
 que se deberá especificar en la longitud del registro.

-A cada registro siempre se le añade el carácter de control de carro
 (OD) y el carácter de avance de línea (OA). Si tenemos las siguientes
 instrucciones:

-OPEN (33, FILE='FDIR', FORM='FORMATTED', ACCESS='DIRECT',
  RECL=10)
  WRITE (33, '(A)', REC=1) 'Registro 1'
  WRITE (33, '(I5)', REC=3) 30303
  CLOSE (33)

-La salida que dará este ejemplo será la siguiente:

-Se puede ver que del registro primero se pasa al tercero. En los
 ficheros Directos, se reserva espacio para los registros.

-De esa forma si luego viene un registro segundo se insertaría entre los
 registros primero y tercero.

-Los registros de tipo Directo-No formateados es la opción por defecto,
 en la que la longitud del registro es la misma para todos pero el
 compilador no introduce los caracteres OD y OA.

LECTURA DE UN FICHERO SECUENCIAL.

-Transfiere la información contenida en los registros del fichero a la
 memoria del ordenador representada por las variables que aparecen en
 la lista de la sentencia de lectura.

-La sentencia READ tiene la sintaxis para ficheros Secuenciales
 siguiente:

-READ ( UNIT= N,  FORM=Formato ,  END=Etiqueta ,  ERR=Etiqueta ,
   IOSTAT=N ,  REC=N ) Lista de variables.

-La opción que siempre debe figurar es el número de Unidad perteneciente
 al de apertura del fichero Secuencial.

-La opción END, donde Etiqueta es un número entero indica que al
 detectar el carácter de fin de fichero transfiera el control de
 ejecución del programa a la etiqueta indicada.

-Todas las demás opciones ya se han explicado.

-Para leer un fichero la primera opción a realizar es abrirlo en la
 opción STATUS con el valor OLD.

POSICIONAMIENTO EN UN FICHERO SECUENCIAL.

-La lectura y escritura de registros se realiza uno a uno y en serie.
 Hay dos sentencias para regresar un registro (BACKSPACE) y para
 posicionarse al principio del fichero (REWIND).

-La sintaxis de BACKSPACE es la siguiente:

-BACKSPACE N.
 -BACKSPACE ( UNIT= N,  IOSTAT=N ,  ERR=Etiqueta ).

-N es el número de la Unidad a la cual está conectado el fichero. Si no
 hay registro anterior porque el fichero se acaba de abrir no tiene
 efecto.

-Todas las demás opciones ya se han explicado.

-La sentencia REWIND tiene la siguiente sintaxis:

-REWIND N.
 -REWIND ( UNIT= N,  IOSTAT=N ,  ERR=Etiqueta ).

-El efecto es rebobinar el fichero al comienzo, apuntando al primer
 registro. Todas las demás opciones ya se han explicado.

CREACION DE UN FICHERO DE ACCESO DIRECTO.

-Cada registro de un fichero de acceso Directo es identificado
 únicamente por su posición lógica en el fichero o número de registro
 que es un entero de 1 a n.

-El acceso a los registros se hace siempre a partir del número de
 registro con el que fue creado. En un fichero de acceso Directo no
 tiene sentido el registro EOF.

-Por ello ENDFILE no se debe ejecutar sobre estos ficheros, porque no
 tiene efecto.

-En un fichero de acceso Directo se reserva espacio de almacenamiento
 para todos los posibles registros.

-En los ficheros de acceso Directo los datos de entrada o de salida
 deben ir siempre con formato. Este tipo de ficheros es creado al
 abrirlo, especificando acceso directo y dándole una longitud.

-Los ficheros no formateados guardan la información en código binario,
 siendo el acceso a los registros más rápidos porque se elimina el
 tiempo de conversión a binario.

-Los registros pueden ser escritos o leídos en cualquier orden. Siempre
 hay que indicar en las sentencias READ y WRITE un parámetro REC que
 indicará el número de registro a acceder.

-El proceso para leer un registro es similar al de escribir. Hay que
 especificar el número de registro que se quiere leer.

SENTENCIA "INQUIRE".

-Con esta sentencia durante la ejecución de un programa puede obtenerse
 información sobre las características de una Unidad o de un fichero.

Puede ejecutarse antes de que un fichero haya sido abierto, conectado
 a una Unidad.

-La información que puede requerirse de un fichero o de una Unidad es
 muy variada. La sintaxis para esta sentencia es la siguiente:

-INQUIRE (UNIT=N, Lista de especificadores).

-Donde N es un número de unidad sobre el que se va a preguntar siendo
 la lista de especificadores opcionales los siguientes:

-ACCESS=Var*10 ('SEQUENTIAL' o 'DIRECT').
 -BLANK=Var*4 ('NULL' o 'ZERO').
 -DIRECT=Var*7 ('YES', 'NO' o 'UNKNOWN').
 -EXIST=Var ('.TRUE.' o '.FALSE.').
 -FORM=Var ('UNFORMATTED' o 'FORMATTED).
 -FORMATTED=Var ('YES', 'NO' o 'UNKNOWN').
 -NAME=Var*3 ('.TRUE.', '.FALSE.' o 'Nombre').
 -NEXTREC=N (Registro después del último accedido).
 -NUMBER=N (Número de Unidad igual a UNIT).
 -OPENED=Var ('.TRUE.' o '.FALSE.').
 -RECL=N (Longitud del registro).
 -SEQUENTIAL=Var ('YES', 'NO' o 'UNKNOWN').
 -UNFORMATTED=Var ('YES', 'NO' o 'UNKNOWN').
 -IOSTAT=N (Código de estado).
 -ERR=Etiqueta (Bifurcaciones de error).
 -BINARY=Var*10 ('YES', 'NO' o 'UNKNOWN').
 -BLOKSIZE=N (Tamaño del buffer).

-Si se produce error en INQUIRE todas las variables que figuran en la
 sentencia queda un valor indefinido excepto la variable entera de
 STATUS y las variables de los especificadores pueden ser elementos de
 un Array.

-Otra posibilidad de INQUIRE es preguntar por el fichero con la
 siguiente sintaxis:

-INQUIRE (FILE='Nombre', Lista de especificadores).

-La lista de especificadores es la misma que la anterior. Si el nombre
 del fichero es un identificador válido para el sistema y si el fichero
 existe se añadirán los siguientes:

-DIRECT, FORMATTED, NAME, SEQUENTIAL y UNFORMATTED.

-Si el fichero está abierto puede aplicarse:

-ACCESS, BLANK, FORM, NEXTREC, NUMBER, BELL, IOSTAT y ERR.

-La ventaja es que provee de información muy valiosa para abrir ficheros
 o evitar errores que abortan la ejecución de un programa.

FICHEROS INTERNOS.

-Cuando el programa ejecuta READ o WRITE con un fichero o dispositivo
 externo se realizan las dos operaciones conjuntamente.

-En los ficheros internos la transferencia de información se produce
 entre dos áreas de memoria interna. Un fichero interno es un área de
 almacenamiento interno.

-Las entradas o salidas con ficheros internos deben ser siempre
 formateadas con los códigos de formato deseados por el programador.

-Con los ficheros internos hay que especificar siempre los códigos de
 formato en las sentencias WRITE y READ.

-Para acceder a más de un registro en un fichero interno hay que
 ejecutar una sóla vez la sentencia READ o WRITE.

-Las opciones que no se permiten usar son las siguientes:

-OPEN, CLOSE, INQUIRE, REWIND, BACKSPACE y ENDFILE.

FICHEROS BINARIOS.

-Es un fichero de tipo Secuencial aunque también podemos tener ficheros
 Directos, pero de esta forma permite recibir o escribir más de un
 registro a la vez.

-No se separan los registros y se lee de la misma manera pero en el
 Directo hay que poner en la opción de formato lo siguiente:

-FORM='BINARY'.

-Si tenemos las siguientes instrucciones:

-INTEGER *1 VarA (4)
  CHARACTER VarB (3)
  CHARACTER *4 VarC
  DATA VarA /4*7/
  DATA VarC /'Esto'/, VarB /'A', 'B', 'C'/
  OPEN (33, FILE='FBIN', FORM='BINARY')
  WRITE (33) VarB, VarC
  WRITE (33) 'Que', 'Quieres'
  WRITE (33) VarA
  CLOSE (33)

-La salida que producirá en el registro será la siguiente:

-Notar que la separación es imaginaria. Siempre en un fichero Directo
 se han de inicializar las variables normalmente.
[editar]

14 opiniones

q pendejos los q lean esto

no explik nada acerca de los ciclos y la secuencia logica que lleva un programa medio te dicen pero no esta nada completo
malo

en verdad no tiene mucha informacion no le hagan al buey
les faltan ejemplos

, y decir en que posición del programa declaras los complejos
MUY PERO MUY PERO MUY BUENO

ES MUY COMPLETO.NO ENTENDI PERO ES COMPLETO PORQEU ESO ME DIJERON JAJAJAJA NO MENTIRAS ES MUY BUENO
Funciones intrinsecas.

Bien.
1 2 3 | siguiente >

Cursos gratis relacionados con 'Curso de Fortran'

Completo curso de lenguaje ensamblador. El lenguaje Fortran tiene unos números y signos que utiliza... Más »
El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus... Más »
Un sistema informático utiliza ordenadores para almacenar datos, procesarlos y ponerlos a disposición de quien... Más »
Aprende a programar en Visual Basic, de forma rapida y sencilla, con tan solo 20... Más »
Mediante este pequeño pero abartcador curso ud. Podra conocer mejor las actualizaciones del C#. NET... Más »

Autor y licencia de 'Curso de Fortran'


Curso gratis de Anónimo. Extraido de: CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.