Tema 1: FICHEROS Laboratorio de Programación II Elena García Barriocanal Registros (I) • Colección de información heterogénea. • Se compone de campos: unRegistro[=|:] RECORD campo1: tipo; campo2: tipo; …… END; • El acceso a cada campo se realiza con notación punto: vbleRegistro.campo1 Elena García Barriocanal Registros (II) • El acceso a los campos también se puede realizar mediante una sentencia with WITH vbleRegistro [,vbleRegistro,…] DO instrucción – El uso de más de un identificador de resgistro equivale a tener with anidados. • Registros con campos variantes: – Parte fija – Parte variante (en función del valor de campo discriminante) unReg[=|:]RECORD campoFijo1: tipo; campoFijo2: tipo; …… CASE campoDiscriminante: tipo OF valor:(cVnte1:tipo;cVnte2:tipo;…); valor:(cVnte1:tipo;cVnte2:tipo;…); …… END; Elena García Barriocanal Ficheros • Colección secuencial de elementos del mismo tipo almacenados en un dispositivo de almacenamiento externo permanente (físico). • Tipos de ficheros: – Ficheros de Texto (organización secuencial). Para tener acceso a la posición n hay que acceder primero a la n-1. – Ficheros de definidos por el usuario (acceso directo). Se accede directamente al dato mediante un índice o dirección. Elena García Barriocanal Archivos de Texto (I) • Responden a una organización secuencial. • Están formados por cadenas de caracteres separadas unas de otras por los códigos retorno de carro/avance de línea (13/10 código ASCII). • El final del archivo se indica mediante el carácter ASCII 26, que también se expresa como EOF. • Para utilizarlos: – Declarar una variable de tipo texto y asociarla al nombre de un archivo. – Abrir el archivo ya sea para lectura o escritura. – Leer o escribir datos en el archivo. – Cerrar el archivo Elena García Barriocanal Archivos de Texto (II) • Declaración: VAR varArch : Text; • Asociación a nombre de archivo: Assign (varArch, nomArchivo); • Apertura: Reset|Append|Rewrite (varArch); • Escritura: Write|WriteLn (varArch, varBase); • Lectura: Read|ReadLn (varArch, varBase); Elena García Barriocanal Archivos de Texto (III) • Detección marca fin archivo: EOF (varArch); En Pascal no es necesaria la lectura anticipada. • Detección marca fin de línea: EOL (varArch); • Cierre: Close (varArch); Elena García Barriocanal Archivos de Texto (y IV) • Renombrado: Rename (varArch, nombre); El fichero debe estar cerrado • Eliminación: Erase (varArch); El fichero debe estar cerrado Elena García Barriocanal Fichero Acceso Directo (I) • Un archivo de acceso directo esta formado por un conjunto de partes individuales que pertenecen al mismo tipo de datos. • Cada uno de los componentes del archivo es llamado registro. • Cada uno de los componentes de este tipo de archivos es accesible directamente. • Las funciones Hash o de conversión permiten obtener la posición de un registro en el archivo (según clave). Elena García Barriocanal Ficheros Acceso Directo (II) • Cuando a dos registros les “corresponde” la misma posición, se produce una colisión. • Tratamiento de colisiones: – El registro que colisiona se sitúa en la zona de colisiones. – La zona de colisiones se maneja secuencialmente. – Cuando se quiere recuperar un registro, se ha de comprobar que no colisionó, en cuyo caso se debe buscar en la zona de colisiones. Elena García Barriocanal Ficheros Acceso Directo (III) • Declaración: TYPE tipofichero = FILE OF varBase; VAR varFich : tipofichero; • Asignación: Assign (varFich, nomFich); • Apertura: Rewrite|Reset (varFich); • Posicionamiento: Seek (varFich, posición); Elena García Barriocanal Ficheros Acceso Directo (IV) • Lectura: Read (varFich, varBase); • Escritura: Write (varFich, varBase); • Cierre: Close (varFich); • Número de registro actual: FilePos (varFich); Elena García Barriocanal Ficheros Acceso Directo (y V) • Tamaño en bytes de un archivo: FileSize (varFich); • Longitud en bytes de una variable: SizeOf (varBase); Elena García Barriocanal