Transparencias

Anuncio
Algorítmica y Lenguajes de Programación
Ficheros
Ficheros. Introducción
n
n
n
n
n
n
Un fichero es una unidad de información almacenada en
disco a la que se asigna un identificador único.
Los ficheros nos ofrecen la posibilidad de almacenar datos de
una manera permanente.
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).
Hay dos formas de acceso a los mismos: secuencial y
directo.
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).
En el acceso directo cada registro tiene asociada una clave que
permite un acceso inmediato sin tener que recorrer previamente
otros registros.
2
1
Ficheros. Notación algorítmica (i)
n
n
En la notación algorítmica sólo se empleará el
acceso secuencial.
Para poder utilizar un fichero es necesario, en
primer lugar, declarar el tipo del mismo:
variable ∈ fichero de tipo
n
Por ejemplo:
numeros ∈ fichero de entero
carta ∈ fichero de caracter
matriculacion ∈ fichero de alumno
3
Ficheros. Notación algorítmica (ii)
n
n
n
n
Una vez declarado un fichero, es posible abrirlo y
cerrarlo.
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.
La segunda indica que las operaciones con el fichero
han finalizado (los cambios se grabarán en disco).
La sintaxis de ambas operaciones es la siguiente:
abrir (fichero)
cerrar (fichero)
n
Por ejemplo:
abrir (matriculacion)
cerrar (matriculacion)
4
2
Ficheros. Notación algorítmica (iii)
n
n
n
Una vez un fichero está abierto es posible leer y escribir datos
del mismo.
Los datos leídos/escritos serán del tipo básico del fichero.
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...)
5
Ficheros. Notación algorítmica (iv)
n
n
Al leer de un fichero es necesario saber
si se ha llegado al final del mismo.
Existe una función lógica que indica si
ya se ha alcanzado el fin de fichero:
fin_fichero (fichero)
n
Por ejemplo:
fin_fichero (matriculacion)
6
3
Ficheros. Ejemplo algorítmico (i)
n
Algoritmo que lee enteros mayores o iguales
que 0 por teclado y los almacena en un
archivo:
n
n
n
n
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.
Al principio del algoritmo el fichero debe abrirse.
Al final del algoritmo el fichero debe cerrarse.
El algoritmo se basará en un bucle que leerá números
mientras dichos números no sean negativos.
Si el número leído es mayor o igual que 0 lo almacena en el
fichero.
7
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
fin mientras
cerrar (numeros)
fin
8
4
Ficheros. Ejemplo algorítmico (iii)
n
Algoritmo que recorre un fichero con
datos de alumnos y los muestra por
pantalla:
n
n
n
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.
Al principio del algoritmo el fichero debe abrirse.
Al final del algoritmo el fichero debe cerrarse.
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
9
pantalla.
Ficheros. Ejemplo algorítmico (iv)
tipos
alumno = 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
10
5
Ficheros. Notación FORTRAN (i)
n
n
n
n
FORTRAN permite manejar ficheros, sin embargo, ¡¡no tiene un tipo
fichero!!
Es posible utilizar ficheros de acceso secuencial y directo,
nosotros sólo utilizaremos ficheros secuenciales.
Para acceder a los ficheros, FORTRAN utiliza números de unidad;
estos números varían entre 1 y 99 y podemos utilizar los que
queramos para cada fichero a excepción del 5 y el 6 (teclado y
pantalla, respectivamente).
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
n
El valor unknown es muy útil si no sabemos si el fichero existe
(correspondería old) o existe (equivaldría a new).
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’)
11
Ficheros. Notación FORTRAN (ii)
n
n
Para cerrar un fichero en FORTRAN se utiliza la acción:
close (unidad)
Por ejemplo,
Para cerrar el anterior fichero carta.txt
close (1)
n
Para cerrar el fichero matriculacion.dat
close (2)
n
n
También existen acciones de lectura y escritura con la siguiente sintaxis:
read (unidad, formato) variable
write (unidad, formato) expresión
n
n
Al igual que con la entrada y salida estándar prescindiremos del formato y
emplearemos el formato libre, *.
Ejemplos:
open (unit=1,file=’matriculacion.dat’,status=‘ old’)
read (1,*) datos_alumno
open (unit=2,file=’carta.txt’,status=‘old’)
read (2,*) letra
close (1)
open (unit=1,file=’matriculacion.dat’,status=‘ old’)
write (1,*) datos_alumno
12
6
Ficheros. Notación FORTRAN (iii)
n
n
En FORTRAN también es posible saber si se
ha llegado al final del mismo.
Existe una función intrínseca que indica esta
situación:
eof (unidad)
n
Por ejemplo:
open (unit=1,file=’matriculacion.dat’,status=‘old’)
eof (1)
13
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
14
7
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
15
Ficheros. Resumen
1.
2.
3.
4.
5.
6.
Un fichero es una unidad de información almacenada en disco a
la que se asigna un identificador único.
Los ficheros son estructuras secuenciales en las que se
almacenan datos pertenecientes a un mismo tipo.
Hay dos formas de acceso a ficheros: secuencial y directo.
En la notación algorítmica sólo existen ficheros secuenciales y
para utilizar un fichero es necesario declararlo.
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.
Las operaciones básicas con un fichero son:
n
Apertura.
Cierre.
Lectura/Escritura.
n
Fin de fichero.
n
n
16
8
Descargar