Algorítmica y Lenguajes de Programación
Ficheros
2
Ficheros.
Introducción
n Un fichero es una unidad de información almacenada en
disco a la que se asigna un identificador único.
n Los ficheros nos ofrecen la posibilidad de almacenar datos de una manera permanente.
n Pueden considerarse estructuras secuenciales en las que se
almacenan datos pertenecientes a un mismo tipo: de texto (caracteres), de tipo entero, de registros (datos de los alumnos de una asignatura).
n Hay dos formas de acceso a los mismos: secuencial y
directo.
n En el acceso secuencial para leer o escribir un registro es necesario pasar por todos los registros previos (de manera análoga a como se trabajaría con una cinta).
n En el acceso directo cada registro tiene asociada una clave que permite un acceso inmediato sin tener que recorrer previamente otros registros.
3
Ficheros.
Notación algorítmica (i)
n
En la notación algorítmica sólo se empleará el
acceso secuencial.
n
Para poder utilizar un fichero es necesario, en
primer lugar, declarar el tipo del mismo:
variable
∈
∈
fichero de tipo
nPor ejemplo:
numeros
∈
∈
fichero de entero
carta
∈
∈
fichero de caracter
matriculacion
∈
∈
fichero de alumno
Ficheros.
Notación algorítmica (ii)
n
Una vez declarado un fichero, es posible
abrirlo
y
cerrarlo
.
n
La primera operación prepara el fichero para poder
escribir o leer del mismo; si imaginamos el fichero
como una cinta esta acción colocaría la “cabeza de
lectura” al comienzo de la misma.
n
La segunda indica que las operaciones con el fichero
han finalizado (los cambios se grabarán en disco).
nLa sintaxis de ambas operaciones es la siguiente:
abrir (fichero) cerrar (fichero)
5
Ficheros.
Notación algorítmica (iii)
n Una vez un fichero está abierto es posible leer y escribirdatos
del mismo.
n Los datos leídos/escritos serán del tipo básico del fichero. n La sintaxis de ambas operaciones es la siguiente:
leer (fichero, variable) escribir (fichero, expresión) n Por ejemplo:
leer (matriculacion, datos_alumno) leer (carta, letra)
escribir (matriculacion, datos_alumno) escribir (numeros, 7)
escribir (carta, “Queridos Reyes Magos...”)
n Cuando se ejecuta una acción de lectura/escritura la “cabeza de
lectura” avanza una posición en el fichero (al siguiente entero/carácter/registro...)
6
Ficheros.
Notación algorítmica (iv)
n
Al leer de un fichero es necesario saber
si se ha llegado al final del mismo.
n
Existe una función lógica que indica si
ya se ha alcanzado el fin de fichero:
fin_fichero (fichero)
n
Por ejemplo:
7
Ficheros.
Ejemplo algorítmico (i)
n
Algoritmo que lee enteros mayores o iguales
que 0 por teclado y los almacena en un
archivo:
n El algoritmo debe utilizar una variable de tipo entero para leer los números por teclado y una variable de tipo fichero de enteros para almacenar en dicho fichero los números. n Al principio del algoritmo el fichero debe abrirse.
n Al final del algoritmo el fichero debe cerrarse.
n El algoritmo se basará en un bucle que leerá números mientras dichos números no sean negativos.
n Si el número leído es mayor o igual que 0 lo almacena en el fichero.
Ficheros.
Ejemplo algorítmico (ii)
variables
numeros∈∈ fichero de entero numero ∈∈ entero
inicio
escribir ‘Introduzca enteros positivos:’ numero ßß 0
abrir (numeros)
mientras numero ≥ 0 hacer leer numero
si numero ≥ 0 entonces escribir (numeros, numero) fin si
9
Ficheros.
Ejemplo algorítmico (iii)
n
Algoritmo que recorre un fichero con
datos de alumnos y los muestra por
pantalla:
n
El algoritmo debe utilizar una variable de tipo fichero
de registros de alumnos que almacena los datos (este
algoritmo no lo ha escrito) y una variable de tipo
registro para leer desde el fichero y mostrarlo por
pantalla.
n
Al principio del algoritmo el fichero debe abrirse.
n
Al final del algoritmo el fichero debe cerrarse.
n
El algoritmo se basará en un bucle que leerá registros
del fichero mientras no se llegue al final del mismo; el
contenido de cada registro leído se mostrará por
pantalla.
10
Ficheros.
Ejemplo algorítmico (iv)
tiposalumno = tupla
nombre, apellidos ∈∈ caracter fin tupla
variables
datos_alumno ∈∈ alumno
matriculacion ∈∈ fichero de alumno inicio
abrir (matriculacion)
mientras no fin_fichero (matriculacion) hacer leer (matriculacion, datos_alumno)
escribir ‘Nombre: ‘, datos_alumno.nombre escribir ‘Apellidos: ‘, datos_alumno.apellidos fin mientras
cerrar (matriculacion) fin
11
Ficheros.
Notación FORTRAN (i)
n FORTRAN permite manejar ficheros, sin embargo, ¡¡no tiene un tipo fichero!!
n Es posible utilizar ficheros de acceso secuencial y directo, nosotros sólo utilizaremos ficheros secuenciales.
n Para acceder a los ficheros, FORTRAN utiliza números de unidad; estos números varían entre 1 y 99y podemos utilizar los que queramos para cada fichero a excepción del 5 y el 6(teclado y pantalla, respectivamente).
n Para abrir en FORTRAN un fichero y asociarlo a un número de unidad (y a una ruta de fichero) se emplea la siguiente sintaxis:
open (unit =unidad,file=ruta fichero,status=‘new’|’old’|’unknown’ ) n El valor unknownes muy útil si no sabemos si el fichero existe
(correspondería old) o existe (equivaldría a new).
n Por ejemplo:
n Abrir el inexistente fichero carta.txt:
open (unit=1, file=‘carta. txt’, status=‘ new’)
n Abrir el fichero ya existente matriculacion.dat: open (unit=2, file=‘matriculacion .dat’ , status=‘old’ )
Ficheros.
Notación FORTRAN (ii)
n Para cerrar un fichero en FORTRANse utiliza la acción:close (unidad)
n Por ejemplo,
n Para cerrar el anterior fichero carta.txt close (1)
n Para cerrar el fichero matriculacion.dat close (2)
n También existen acciones de lectura y escrituracon la siguiente sintaxis: read (unidad, formato) variable
write (unidad, formato) expresión
n Al igual que con la entrada y salida estándar prescindiremos del formato y emplearemos el formato libre, *.
n Ejemplos:
open (unit =1,file=’matriculacion.dat’,status=‘ old’) read (1,*) datos_alumno
13
Ficheros.
Notación FORTRAN (iii)
n
En FORTRAN también es posible saber si se
ha llegado al final del mismo.
n
Existe una función intrínseca que indica esta
situación:
eof (unidad)
nPor ejemplo:
open (unit=1,file=’matriculacion .dat’,status=‘old’) eof (1)
14
Ficheros.
Ejemplos FORTRAN (i)
n Programa que lee enteros mayores o iguales que 0 por teclado
y los almacena en un archivo: program programa
implicit none integer numero
print *, 'Introduzca enteros positivos:' numero = 0
open (unit=1,file= 'numeros.dat',status='unknown' )
do while (numero>=0) read *, numero if (numero>=0) then write (1,*) numero end if end do close (1) end
15
Ficheros.
Ejemplos FORTRAN (ii)
n Programa que recorre un fichero con datos de alumnos y los
muestra por pantalla: program programa
implicit none type alumno
character*64 nombre character*128 apellidos end type alumno
type (alumno) datos_alumno
open (unit=1,file=‘matriculacion .dat’,status=‘unknown’) do while (.not.eof(1))
read (1,*) datos_alumno
print *,'Nombre: ',datos_alumno%nombre,'Apellidos: ',datos_alumno%apellidos end do
close (1) end
Ficheros.
Resumen
1. Un fichero es una unidad de información almacenada en disco a
la que se asigna un identificador único.
2. Los ficheros son estructuras secuenciales en las que se
almacenan datos pertenecientes a un mismo tipo.
3. Hay dos formas de acceso a ficheros: secuencial y directo.
4. En la notación algorítmica sólo existen ficheros secuenciales y
para utilizar un fichero es necesario declararlo.
5. En FORTRAN aunque existen ficheros de acceso directo no los
utilizaremos; además, no existe un tipo fichero sino que se emplean números de unidad.
6. Las operaciones básicas con un fichero son: n Apertura.