Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego...
Transcript of Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego...
![Page 1: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/1.jpg)
1Diego Gutiérrez
Tema 16. Ficheros secuenciales I
![Page 2: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/2.jpg)
2Diego Gutiérrez
Ficheros secuenciales
Índice:
![Page 3: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/3.jpg)
3Diego Gutiérrez
Y si cada vez que apagáramos el ordenador…
…toda la información desapareciera?
![Page 4: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/4.jpg)
4Diego Gutiérrez
Contar el número de vocales de una frase acabada en ‘.’
Contar el número de vocales de El Quijote
Introduzca una frase:Esta es la frase que introduzco.
El número de vocales es de 12
Introduzca El Quijote:
![Page 5: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/5.jpg)
5Diego Gutiérrez
Almacenamiento permanente de la informaciónMemoria RAM: memoria volátilMemoria secundaria: permanente
Ficheros!Físicos (S.O.)Lógicos (variables de un programa)
No es del todo nuevo: input, output
![Page 6: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/6.jpg)
6Diego Gutiérrez
Ficheros secuenciales
Un fichero es un conjunto de unidades de información (componentes o registros) del mismo tipo, almacenado sobre un determinado soporte físico de almacenamiento permanente de la información, con una determinada organización lógica
Acceso secuencial, directo, indexado…
Acceso a los componentes en el orden en que están almacenados: empezando por el primer elemento y accediendo uno a uno a todos los componentes que lo preceden
![Page 7: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/7.jpg)
7Diego Gutiérrez
Ficheros secuenciales
Un fichero secuencial de datos de tipo tpDato es una estructura de datos capaz de almacenar secuencias finitas de datos de tipo tpDato
Ficheros (secuenciales) de texto: la información se almacena en forma de caracteres externos
Ficheros (secuenciales) binarios: la información se almacena con representación binaria interna
tipo tpFichero = fichero de tpDato;
![Page 8: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/8.jpg)
8Diego Gutiérrez
características fundamentalesacceso secuencial a las componentes
dos modos de trabajo: creación e inspección
almacenamiento externo (normalmente en memoria secundaria)
Ambos modos son incompatibles
![Page 9: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/9.jpg)
9Diego Gutiérrez
Tratamiento de secuencias
Concepto de secuenciaUna secuencia tiene asociadas las operaciones:
primero(s): devuelve el dato d1, primer elemento de la secuencia sresto(s): devuelve la secuencia <d2,d3,…,dn> resultado de eliminar el primer elemento de la secuencia s
Para toda secuencia s no vacía se verifica la siguiente relación:s = <primero(s)> • resto(s)
Conviene observar que primero(s) es un dato de tipo T0, mientras que s, <primero(s)> y resto(s) son secuencias de datos de tipo T0.
![Page 10: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/10.jpg)
10Diego Gutiérrez
Tratamiento de secuencias
Concepto de secuencia
s = “Secuencia de ejemplo.”primero(s) = “Secuencia de ejemplo.”resto(s) = “ecuencia de ejemplo.”primero(s) = “ecuencia de ejemplo.”resto(s) = “cuencia de ejemplo.”
Secuencia de ejemplo.
pd
primero(s)
![Page 11: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/11.jpg)
11Diego Gutiérrez
Tratamiento de secuencias
Concepto de secuencia
s = “Secuencia de ejemplo.”primero(s) = “Secuencia de ejemplo.”resto(s) = “ecuencia de ejemplo.”primero(s) = “ecuencia de ejemplo.”resto(s) = “cuencia de ejemplo.”
Secuencia de ejemplo.
pd
primero(s)
pi
![Page 12: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/12.jpg)
12Diego Gutiérrez
Tratamiento de secuencias
Concepto de secuencia
s = “Secuencia de ejemplo.”primero(s) = “Secuencia de ejemplo.”resto(s) = “ecuencia de ejemplo.”primero(s) = “ecuencia de ejemplo.”resto(s) = “cuencia de ejemplo.”
Secuencia de ejemplo.
pd
primero(s)
piDesde esta perspectiva, siempreel primer elemento de la parte derechade la secuencia
![Page 13: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/13.jpg)
13Diego Gutiérrez
Hasta ahora, a cualquier variable se le podía modificar su valor mediante una operación de asignación… Sin embargo, a las variables de tipo fichero no se les puede asignar valores mediante la asignación
El modo de trabajo con datos definidos como ficheros presenta unas características muy especiales…
![Page 14: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/14.jpg)
14Diego Gutiérrez
Modos de trabajo
Modo escriturao construcción
Se construye la secuencia de datos mediante la incorporación de datos al final de la secuencia actual
• escribir (s, expresión) fI ← fI • < expresión >
• escribir (expresión) fI ← fI • < expresión >
fI fD
primero(fD)
f
![Page 15: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/15.jpg)
15Diego Gutiérrez
Escritura (o construcción) de un fichero secuencial
Se dispone de dos operaciones: los procedimientos iniciarEscrituray escribir
iniciarEscritura: permite establecer el modo de trabajo de escritura o construcción sobre la variable fichero secuencial que figura como argumento en su invocación a la vez que asigna a dicha variable una secuencia de datos vacía
iniciarEscritura(f);
(modoTrabajo(f)=escritura) ^ (f=<>)
![Page 16: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/16.jpg)
16Diego Gutiérrez
Escritura (o construcción) de un fichero secuencial
Se dispone de dos operaciones: los procedimientos iniciarEscrituray escribir
iniciarEscritura: permite establecer el modo de trabajo de escritura o construcción sobre la variable fichero secuencial que figura como argumento en su invocación a la vez que asigna a dicha variable una secuencia de datos vacía!
iniciarEscritura(f);
(modoTrabajo(f)=escritura) ^ (f=<>)
![Page 17: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/17.jpg)
17Diego Gutiérrez
Escritura (o construcción) de un fichero secuencial
escribir: realiza la adición (escritura) de un dato al fichero, que pasará a ser el último elemento de la secuencia de datos que almacena.
escribir(f, expresión);secuencia(f):= secuencia(f)•<expresión>;
Sólo puede invocarse sobre una variable que sea un fichero secuencial f en modo de escritura, es decir, que satisfaga la relación modoTrabajo(f)=escritura
![Page 18: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/18.jpg)
18Diego Gutiérrez
Escritura (o construcción) de un fichero secuencial
algoritmo construirFichero (ES f:tpFichero){ Pre: ---
Post: El fichero “f” almacena una secuencia de datosobtenidos por el procedimiento “obtenerDato” }
variablesdato:tpDato;
principioiniciarEscritura(f); obtenerDato(dato);mientrasQue ¬final(dato) hacer
escribir(f,dato); obtenerDato(dato);finMQ
Fin.
![Page 19: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/19.jpg)
19Diego Gutiérrez
Modos de trabajo
Modo inspección(o lectura)
Accedemos a la secuencia de datos almacenados comenzando por el primero y avanzando uno a uno
fi fd
primero(fD)
• leer (s, variable) variable ← primero(fD)fI ← fI • <primero(fD)>; fD ← resto(fD)
ERROR si finSecuencia
• leer (variable) variable ← primero(fD)fI ← fI • <primero(fD)>; fD ← resto(fD)
ERROR si finSecuencia
![Page 20: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/20.jpg)
20Diego Gutiérrez
Lectura (o inspección) de un fichero secuencial
Recordemos: fI: subsecuencia de elementos del fichero f que ya han sido leídosfD: subsecuencia de elementos pendientes aún de ser leídosf puede verse, desde un punto de vista formal, como una concatenación de las dos secuencias fI y fD: f = fI • fD
Se dispone de tres operaciones: los procedimientos iniciarLecturay leer y la función finFichero
![Page 21: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/21.jpg)
21Diego Gutiérrez
Lectura (o inspección) de un fichero secuencial
iniciarLectura: establece el modo de trabajo de lectura sobre la variable fichero secuencial que figura como argumento en su invocación; además, dispone el proceso para su inspección de forma que el dato que sea accedido en la primera operación de lectura sea el primer dato almacenado en el fichero
iniciarLectura(f);
(modoTrabajo(f)=lectura) ^ (fI=<>) ^ (fD=f)
![Page 22: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/22.jpg)
22Diego Gutiérrez
Lectura (o inspección) de un fichero secuencial
leer: Lee el siguiente dato almacenado en el fichero f y asigna su valor a variable; además, dispone al fichero f para que, en la proxima operación de lectura, sea accedido el dato siguiente al que acaba de ser leído
leer(f,variable);variable:= primero(fD);
fI:= fI•primero(fD); fD:= resto(fD);
Sólo puede invocarse sobre una variable f que sea un fichero secuencial en modo de lectura, es decir, que satisfaga la relación modoTrabajo(f)=lectura
![Page 23: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/23.jpg)
23Diego Gutiérrez
Lectura (o inspección) de un fichero secuencial
finFichero: Devuelve un valor cierto si y sólo si en el recorrido actual del fichero se ha alcanzado el final de la secuencia de datos almacenada en él (marca de fin de fichero)
finFichero(f);finFichero(f) = (fD=<>)
puede invocarse sobre una variable fichero f en cualquiera de sus modo de trabajo lectura o escritura
![Page 24: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/24.jpg)
24Diego Gutiérrez
Lectura (o inspección) de un fichero secuencial
algoritmo inspecionarFichero (ES f:tpFichero){ Pre: ---
Post: Han sido inspeccionados los datosalmacenados en el fichero “f” }
variablesdato:tpDato;
principioiniciarLectura(f);mientrasQue ¬finFichero(f) hacer
leer(f,dato); inspeccionar(dato);finMQ
Fin.
![Page 25: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/25.jpg)
25Diego Gutiérrez
La lectura/escritura de varios datos se podrá denotar enforma condensada:
leer(f, v1, v2,.., vn) leer(f, v1); leer(f, v2); ..; leer(f, vn);escribir(f, e1, e2,.., en) escribir(f,e1);..;escribir(f,en);
![Page 26: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/26.jpg)
26Diego Gutiérrez
Creación e inspección de ficheros físicos
Un fichero lógico es una estructura de datos de tipo fichero cuyo ámbito de utilización se reduce al algoritmo en que estádefinida dicho fichero. Todas las variables de tipo fichero que se han definido hasta ahora son ficheros lógicos y, por tanto, sólo son conocidas dentro del algoritmo.Sus datos no sobreviven después de concluir la ejecución de éstos.
Y entonces?????
![Page 27: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/27.jpg)
27Diego Gutiérrez
Uno de los aspectos más interesantes de este tipo de estructura de datos consiste en su almacenamiento permanente para su posterior utilización.
Debe asociársele primero un fichero físico gestionado por el sistema operativo.
![Page 28: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/28.jpg)
28Diego Gutiérrez
Los ficheros físicos son estructuras de datos análogas a los ficheros lógicos. Se caracterizan por ser gestionadas por el sistema operativo del computador y, por lo tanto, tener un ciclode vida independiente de los programas que puedan trabajar con ellos.
Conexión lógica fichero_lógico– fichero_físico
![Page 29: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/29.jpg)
29Diego Gutiérrez
Conexión lógica fichero_lógico – fichero_físico
Crear un fichero físico desde un algoritmo (programa). Leer desde un algoritmo (programa) la información almacenada en un fichero físico preexistente.
Procedimientos asociar y disociar
![Page 30: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/30.jpg)
30Diego Gutiérrez
asociar(f,nombreExternoFichero);
Establece una conexión lógica entre la variable f, fichero interno gestionado por el programa, y un fichero externo gestionado por el sistema operativo, definido por la expresión nombreExternoFichero(nombre del fichero según el sistema operativo)
La sintaxis de este nombre se deberá ajustar a las reglas definidas por dicho sistema operativo.
![Page 31: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/31.jpg)
31Diego Gutiérrez
disociar(f);
Pone fin a la última conexión lógica establecida previamente entre la variable f (fichero interno gestionado por el programa) y un fichero externo gestionado por el sistema operativo.
Después de ejecutar este procedimiento, la variable f puede ser asociada a otro fichero externo.
![Page 32: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/32.jpg)
32Diego Gutiérrez
Creación de un fichero externo desde un programa
Almacenar en un fichero de datos de tipo entero cuyo nombre externo es MiPrimerFichero.dat los números naturales comprendidos entre el número 1 y el número que determine interactivamente el usuario.
![Page 33: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/33.jpg)
33Diego Gutiérrez
Creación de un fichero externo desde un programa
algoritmo crearFicheroEnteros{ Pre: ---Post: Almacenados en un fichero externo de nombre “MiPrimerFichero.dat” los números naturalescomprendidos en el intervalo[1,maximo]. El valor de máximo es obtenido de forma interactiva }tipos
tpFicheroEnteros = fichero de entero;variables
fichEnteros: tpFicheroEnteros; { Fichero a crear }máximo: entero; { Último entero a almacenar }número: entero; { Siguiente valor a almacenar }
principioescribirCadena(pantalla,“Último número a almacenar en el fichero : ”);leerEntero(teclado,maximo);asociar(fichEnteros,“MiPrimerFichero.dat”);iniciarEscritura(fichEnteros);número:= 0; mientrasQue ¬(número=maximo) hacer
número:= número+1; escribir(fichEnteros, número);finMQdisociar(fichEnteros);
Fin.
![Page 34: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/34.jpg)
34Diego Gutiérrez
Lectura de un fichero externo desde un programa
Escribir por pantalla los datos almacenados en el fichero de datos enteros cuyo nombre externo es MiPrimerFichero.dat
![Page 35: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/35.jpg)
35Diego Gutiérrez
Lectura de un fichero externo desde un programa
algoritmo listarFicheroEnteros{ Pre: Existe el fichero externo “MiPrimerFichero.dat”
Post: Listado por pantalla con los datos almacenados en el fichero externos de datos enteros denombre “MiPrimerFichero.dat” a razón de un dato por línea }tipos
tpFicheroEnteros = fichero de entero;variables
fichEnteros: tpFicheroEnteros;número: entero; { Último dato leído del fichero }
principioasociar(fichEnteros, “MiPrimerFichero.dat”)iniciarLectura(fichEnteros);mientrasQue ¬finFichero(fichEnteros) hacer
leer(fichEnteros, número);escribirEntero(pantalla, número);acabarLínea(pantalla);
finMQdisociar(fichEnteros);
fin
![Page 36: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/36.jpg)
36Diego Gutiérrez
Lectura de un fichero y creación de otrosalgoritmo CreaParesImpares{ Pre: Existe el fichero externo “datos.dat”
Post: Almacenados los datos pares en el fichero externo “pares.dat” y los datos impares en“impares.dat” }
tipostpFicheroEnteros = fichero de entero;
variablesfDatos, fResultados: tpFicheroEnteros; { Ficheros internos }unDato: entero; { Último dato leído }
principioasociar(fDatos, “datos.dat”); iniciarLectura (fDatos);asociar(fResultados, “impares.dat”);IniciarEscritura (fResultados);mientrasQue ¬finFichero(fDatos) hacer
leer(fDatos,unDato);si ¬(unDato mod 2=0) entonces escribir(fResultados,unDato); finSi finMQ
disociar(fResultados);iniciarLectura(fDatos);asociar(fResultados, “pares.dat”);iniciarEscritura(fResultados);mientrasQue ¬finFichero(fDatos) hacer
leer(fDatos,unDato);si unDato mod 2=0 entonces escribir(fResultados,unDato); finSi finMQ
disociar(fResultados); disociar(fDatos);Fin.
![Page 37: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/37.jpg)
37Diego Gutiérrez
Tratamiento de secuencias
Ejemplo:
Contar el número de subsecuencias de datos consecutivos de valores no decrecientes (≤) en un fichero secuencial
![Page 38: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/38.jpg)
38Diego Gutiérrez
Claves que permiten resolver el problema:
1. identificar que la solución del problema puede plantearse como un algoritmo de recorrido completo de la secuencia, manteniendo en cada iteración el conocimiento de los valores de los dos últimos datos leídos (penúltimo y último)
2. identificar que la condición penúltimo>último permite concluir el comienzo de una nueva subsecuencia
3. aplicar el segundo de los esquemas presentados en la lección anterior (particularidad: si la secuencia es no vacía, el valor inicial de la cuenta de subsecuencias ordenadas debe ser igual a uno)
![Page 39: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/39.jpg)
39Diego Gutiérrez
algoritmo contarSubsecuencias (ES f:tpFichero; ES cuenta:entero){ Pre: ---
Post: El valor de “cuenta” es igual al número de subsecuencias de datos consecutivos de valor no decreciente (≤) almacenadas de “f” }
variablespenúltimo,último: tpD;
principioiniciarLectura(f);si ¬finFichero(f) entonces { “f” almacena uno o más datos }
leer(f,último); cuenta:=1;mientrasQue ¬finFichero(f) hacer { trata un nuevo dato de “f” }
penúltimo:=último; leer(f,último);si penúltimo>último entonces { “último” es el primer dato de una nueva
subsecuencia }cuenta:=cuenta+1;
finSifinMQcuenta:=cuentaParcial;si_no { “f” almacena una secuencia vacía }
cuenta:=0;finSi
fin
![Page 40: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/40.jpg)
40Diego Gutiérrez
Ejemplo: Comparación de dos ficheros secuenciales.
Dados dos ficheros de datos de tipo tpFichero, parámetros del procedimiento, devolver a través de un tercer parámetro un valor lógico cierto si y sólo si los contenidos de ambos ficheros son idénticos.
Para ello es necesario que ambos ficheros tengan el mismo número de datos almacenados y que sus elementos homólogos sean iguales.
Recorrido simultáneo de los dos ficheros
![Page 41: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/41.jpg)
41Diego Gutiérrez
algoritmo sonIguales (ES f,g:tpFichero; ES loSon:booleano){ Pre: ---
Post: El parámetro “loSon” toma un valor “cierto” si y sólo los ficheros “f” y “g”almacenan secuencias idénticas de datos }
variablesdatoF,datoG: tpD;iguales: booleano;
principioiniciarLectura(f); iniciarLectura(g);{ Resolución del problema para dos secuencias vacías }iguales:= cierto;mientrasQue ¬finFichero(f) Y ¬finFichero(g) Y iguales hacer{ Compara los siguientes elementos de “f” y ”g” y actualiza la solución del problema
(valor de “iguales”) }leer(f,datoF); leer(g,datoG);iguales:= (datoF=datoG);
finMQloSon:= (iguales Y finFichero(f) Y finFichero(g));
Fin.
![Page 42: Tema 16. Ficheros secuenciales Igiga.cps.unizar.es/~diegog/ficheros/teaching/fich1.pdf · Diego Gutiérrez Creación e inspección de ficheros físicos Un fichero lógico es una estructura](https://reader033.fdocuments.ec/reader033/viewer/2022052617/60af01044764ba2261314ce7/html5/thumbnails/42.jpg)
42Diego Gutiérrez
Ficheros secuenciales
Conclusiones:
Veremos problemas de búsqueda de un elemento, inserción, o mezcla de ficheros.
Afianzar el uso de ficherosEntender sus limitaciones