You are on page 1of 8

1

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

LOS ARCHIVOS EN PASCAL


Objetivos
1. Aprender para que sirven los archivos. 2. Conocer los distintos tipos de archivos y su manipulacin. 3. Conocer las clases de archivos definibles y su manipulacin en Turbo Pascal 4. Aprender la forma de manejar los archivos desde nuestros programas

Cundo necesitaremos un archivo?


1. Cuando la informacin que vamos a manejar es "tan grande" que no nos cabe en memoria 2. Cuando queremos que "algunos resultados" queden almacenados en la computadora. 3. cundo queramos que una informacin se comparta concurrentemente por varios programa distintos?

Clases de archivos
Definicin Informal: Un archivo lo componen una coleccin de valores todos del mismo tipo. (En esto se parecen a los arrays) El tipo archivo es un tipo compuesto estructurado. Cul es su estructura? Archivos de acceso secuencial Para llegar al valor n-simo hay que "leer" los (n-1) valores que le preceden Archivos de acceso directo Se puede llegar al valor n-simo directamente

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Clases de archivos
La necesidad de que un archivo se almacene en un medio de almacenamiento masivo "EXTERNO" va a condicionar algunas de las cosas que podremos hacer con los archivos Las operaciones mnimas que podramos exigir sobre los archivos son Leer su contenido Escribir su contenido Cambiar su contenido Como mnimo, debemos aspirar a poder manipular archivos de tantos tipos de datos, como podamos definir en nuestros programas. A la vista, podra parecer los archivos son "una Sin embargo no es as. Cul puede ser la razn? especie de arrays" que residen en un perifrico.

Algunas preguntas
Tiene sentido declarar tipos nominales de archivos, al igual que declaramos tipos de registros o de arrays? Tiene sentido declarar variables de un tipo archivo? En caso de poder definir variables de tipo archivo, cul debe ser el valor que almacenan estas? El nombre por el que se le conoce? El contenido del mismo? Tiene sentido la operacin de "asignacin" entre variables de tipo archivo? Tiene sentido la existencia de parmetros formales y actuales de tipo archivo?

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Los archivos en Turbo Pascal (clasificacin)


Por el tipo de Informacin De texto Binarios Por la forma de acceso Secuenciales Acceso directo (aleatorio) El tipo de informacin se determina al declarar los tipos y variables con que trabajar nuestro programa. La forma de acceso se determinar al "vincularlos con nuestro programa"

Declaracin de un tipo Archivo en Turbo Pascal


Decl_archivo::= identificador "=" "FILE OF" Tipo_informacin ";" Tipo_informacin::= "TEXT" | Tipo_valido El tipo TEXT es un tipo de archivo de texto, predefinido TYPE arch_temperat = FILE OF Integer; archivo_platos = FILE OF Tcomidas; archivo_Inform = FILE OF Tficha;

Variables de tipo archivo


VAR temperaturas_anio: arch_temperat; temperaturas_siglo: arch_temperat; mi_programa: TEXT; Function Temp_Media(var arch_temp: Arch_temperat): Integer; {Pre: arch_temp debe estar vinculado a un archivo fsico} {Post: Devuelve el valor medio de todos los valores almacenados en arch_temp}

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Variables de tipo archivo


1. No est permitida la asignacin entre variables de tipo archivo. 2. Tampoco estn permitidas las operaciones relacionales (por ejemplo comparacin en igualdad) 3. Una variable de tipo archivo puede ser parmetro actual en la invocacin a un Procedimiento o funcin. 4. Podemos definir parmetros formales de tipo archivo, pero siempre han de tener el modo VAR. 5. Una funcin no puede devolver valores pertenecientes a un tipo archivo (ojo! De lo que contiene el archivo, s)

Los archivos de texto en Turbo Pascal


La declaracin: mi_archivo: TEXT; Es "equivalente" a la declaracin mi_archivo: FILE OF Char; Un archivo de texto en Turbo Pascal es una secuencia de datos todos pertenecientes al tipo char. La gran ventaja de los archivos de texto es que no tienen necesariamente que ser creados por un programa escrito en Turbo Pascal. Esto puede llevarnos a confusiones sobre la "estructura interna" de un archivo de texto. Pasos a seguir 1. Vincular una variable de tipo TEXT con un archivo existente 2. Abrirlo 1. Lectura 2. Escritura 3. Aadir por el final 3. Leer, escribir o aadir en l, segn modo de apertura 4. Cerrarlo

Vinculado a cualquier archivo existe un "puntero virtual" que me dice en qu punto del archivo estoy leyendo / escribiendo

Vinculacin archivos
Turbo Pascal realiza esta operacin de modo diferente al estandar. Proc_vinculacion::= "Assign" "(var_archivo "," nombre_archivo_real ")" ";" nombre_archivo_real::= Variable_string | constante_string Tanto si se utiliza una variable como una constante para identificar el fichero real a abrir, salvo que se especifique una ruta ,(ms-dos) el archivo se buscar en el directorio en que reside el programa que lo utiliza.

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Apertura de archivos
Apertura para lectura Aper_lectura::= "RESET" "(" var_archivo ")" ";" Si abrimos para lectura un archivo no vinculado se producir un error de ejecucin. El puntero virtual se coloca en el primer carcter del archivo Apertura para escritura Aper_escritura::= "REWRITE" "(" var-archivo ")" ";" Si abrimos para escritura un archivo pre-existente su contenido se borrar. Si el archivo no existiese se crear El puntero virtual se coloca en el primer carcter del archivo Apertura para aadir informacin Aper_aadir::= "APPEND" "(" var_archivo ")" ";" El puntero virtual se coloca en la marca de fin del archivo

Apertura de archivos
Antes de terminar un programa, se debe cerrar el archivo Cierre_arch::= "CLOSE" "(" var_archivo ")" ";" El cierre del archivo escribe al final de ste una marca que indica que la informacin del archivo llega hasta ah. (tamao de bloque fsico/lgico) Un mismo archivo puede abrirse y cerrarse tantas veces como queramos en un mismo programa, en el modo que necesitemos cada vez.

Lectura desde archivos de texto


Proc_lectura::= Proc_Read| Proc_ReadLn Proc_Read::= "Read" "(" var_archivo, var_char{,var_char} ")" ";" Lee de archivo de forma consecutiva tantos caracteres como variables de tipo char tenga como argumento. El putero virtual se coloca en la posicin siguiente al ltimo carcter leido Proc_Readln::= "Readln" "(" var_archivo, var_char{,var_char} ")" ";" Lee de archivo de forma consecutiva tantos caracteres como variables de tipo char tenga como argumento. El putero virtual se coloca al principio de "la siguiente lnea"

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Lectura desde archivos de texto


Func_fin_linea::= "EOLN" "(" var_archivo ")" ";" Devuelve true mientras el puntero virtual de var_archivo apunte a "un final de linea" Func_fin_archivo::= "EOF" "(" var_archivo ")" ";" Devuelve true cuando el puntero virtual de var_archivo apunte a la marca fin de archivo VAR entrada, salida: TEXT; Reset(entrada); Rewrite(salida);

Escribir en archivos de texto


Proc_escritura::= Proc_write | Proc_writeln Proc_write::= "WRITE" "(" var_archiv, algo_de_texto ")" ; Escribe en el archivo vinculado "algo_de_texto" y el puntero virtual se desplaza para escribir en la posicin siguiente Proc_Writeln::= "WRITELN" "(" var_archiv, algo_de_texto ")" ; Escribe en el archivo vinculado "algo_de_texto" y el puntero virtual se desplaza para escribir en la linea siguiente del archivo Ejemplos VAR entrada, salida: TEXT; Begin ..... Assign(entrada, "algun nombre"); Assign(salida, "algun otro nombre"): Reset(entrada); Rewrite(salida);

Qu pasara con los siguientes fragmentos de cdigo?


Ejemplos (1) WHILE not Eof(entrada) do while not Eoln(entrada) do begin Read(entrada, ch); Write(salida, ch); end; {while} ..... Close(entrada); Close(salida);

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Ejemplos (2) WHILE not Eof(entrada) do begin while not Eoln(entrada) do begin Read(entrada, ch); Write(salida, ch); end; {while} ReadLn(entrada); End; {while} ..... Close(entrada); Close(salida); Ejemplos (3) WHILE not Eof(entrada) do Begin while not Eoln(entrada) do begin Read(entrada, ch); Write(salida, ch); end; {while} Read(entrada, ch); Read(entrada, ch); End; {while} ..... Close(entrada); Close(salida);

Los archivos binarios en Turbo Pascal


Son archivos, en los que el tipo de informacin pertenece a cualquiera de los tipos vlidos en Pascal (predefinidos o no) excepto el tipo FILE (no se pueden definir archivos de archivos) Solo se pueden abrir para lectura o para escritura. La forma de vincularlos con un archivo "fisico" es la misma que para los de texto. Al estar organizados por registros es factible acceder directamente a un registro (no es imprescindible la lectura secuencial). Al igual que los archivos de texto, existe en stos un "puntero virtual" que indica la posicin del archivo con la que se est trabajando.

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

Universidad de la Cuenca del Plata


Autorizacin definitiva aprobada por Decreto N 091/06 del Poder Ejecutivo Nacional

Similitudes con los archivos de texto


La lectura de registros se hace de forma secuencial utilizando el procedimiento Read que, tras una lectura, avanza el puntero virtual Existe definida la funcion EOF que devuelve trae si el puntero virtual est apuntando a la marca de fin de archivo. La escritura en archivos binarios se realiza mendiante el procedimiento Write. Despues de utilizarlos hay que invocar al procedimiento Close, para cerrarlos.

Diferencias con los archivos de texto


No se puede utilizar con los archivos binarios el procedimiento Writeln ni el procedimiento Readln. No se puede utilizar la funcin EOLN (no tiene sentido pues un archivo binario no se organiza "por lneas") En los archivos binarios existen predefinidas una serie de procedimiento/funciones

Diferencias con los archivos de texto


Procedure Seek(var F: archivo binario; pos: LongInt); {Post: Mueve el"puntero virtual" para apuntar al registro pos. La posicion del primer registro es la cero} Function FilePos(var F: archivo binario): LongInt; {Post: resultado = posicin a la que apunta el puntero virtual} Function FileSize(var F: archivo binario): LongInt; {Post: resultado = nmero de registros que tiene el archivo}

Apuntes de Programacin I (Pascal)

Ao 2010

Prof. Lic. Alejandro Soler

You might also like