Estructuras No Acotadas: Ficheros y Variables

Estructuras de datos no acotadas

Disponemos de estructuras de datos que no tuvieran un tamaño fijado de antemano, sino que pudieran ir creciendo o reduciendo su tamaño en función de los datos particulares que se estén manejando en cada ejecución del programa.

Estas estructuras de datos se denominan estructuras dinámicas y poseen la cualidad de que su tamaño es potencialmente ilimitado, aunque no podrá exceder la capacidad física del PC.

La estructura secuencia
Puede definirse como un esquema de datos del tipo iteración, pero con un numero variable de componentes.
Es parecida a una formación con numero variable de elementos.

Existen distintas alternativas

Variables dinámicas
Una variable dinámica no se declara como tal, sino que se crea en el momento necesario y se destruye cuando no se necesita

No tienen nombre, sino que se designan mediante otras variables
llamadas puntero o referencias.

Punteros

Uso de variables dinámicas

Realización de secuencias mediante punteros
Al utilizar los punteros, debes tener cuidado y emplearlo
de manera precisa, traduciendo a punteros los mecanismos de definición de alto nivel que deberían estar disponibles.

Una definición recursiva es aquella en que se hace referencia
a si misma.

Operaciones con secuencias enlazadas
Describimos la manera de realizar algunas operaciones típicas sobre secuencias enlazadas con punteros

Recorrido: El recorrido de toda secuencia se consigue mediante un bucle de acceso a elementos y avance del cursor

Como la secuencia tiene un numero indefinido de elementos, no se usara un bucle con contador.

Cursor := secuencia;(*iniciar cursor*)
WHILE cursor <> NIL DO (* NOT fin*)
WriteInt (cursor^.valor,10)
cursor := cursor^.siguiente(* avanzar cursor *)
END

Datos persistentes

Son aquellos que conservan su valor entre ejecuciones sucesivas de los programas que operan con ellos.

Intervienen la memoria interna y la externa (CD´s, Diskettes,...)

Este tipo de datos esta ligado a las operaciones de entrada y salida de información

Para manejar datos persistentes hay que declarar variables en las que serán copiados temporalmente (durante el funcionamiento del programa) y ademas se necesitan operaciones adicionales para establecer la conexión entre dichas variables en memoria interna y los datos en memoria externa.

Ficheros
La forma clásica de usar datos persistentes es mediante el
empleo de ficheros

Los ficheros son estructuras de datos en memoria externa,
que pueden ser manipulados desde un programa, estableciendo una conexión entre dichos ficheros en memoria externa y las variables fichero definidas por el programa en memoria interna.

Los ficheros son estructuras de datos no acotadas, que pueden
almacenar tanta información como se desee, dentro de la capacidad real disponible en cada soporte.

Los mas sencillos son un esquema de datos del tipo secuencia

Un sistema de ficheros permite tener almacenados en un mismo soporte diferentes ficheros que se reparte entre ellos la capacidad de almacenamiento disponibles.

Cada fichero ocupa en un momento dado el espacio que necesita, en funciona de la cantidad de información que contiene, ya que los ficheros son estructuras dinámicas de datos

Los nombres de los distintos ficheros han de ser usados como parámetros en las operaciones de apertura de ficheros.

Ficheros secuenciales
Son estructuras de tipo secuencia:

Si es necesario modificar parte del fichero, hay que generar
otro nuevo con la información actualizada a partir del antiguo.

Si el proceso termina con éxito puedes borrar el antiguo y quedarte con el nuevo

Los ficheros de entrada y salida principales son manejados por el modulo estándar InOut.

Cada fichero se utiliza mediante un curso implícito, que se maneja indirectamente mediante los procedimientos de lectura y escritura.

Operaciones básicas:

El modulo InOut permite cambiar durante la ejecución del programa los ficheros asignados como entrada y salida principales.

Para ello existen unos procedimientos predefinidos llamados 'OpenInput' y 'OpenOutput', que provocan la lectura por el terminal de los nombres de los ficheros correspondientes.

También existen los procedimientos 'Closeinput' y 'CloseOutput'
que finalizan el trabajo con dichos ficheros y vuelven a emplear la entrada y salida principal establecida al comienzo del programa.

Ficheros de texto
Es en realidad un fichero secuencial de caracteres

La única diferencia esta en el modelo lógico de esa secuencia
de caracteres, que se considera dividida en lineas de texto, separadas unas de otras por caracteres especiales de fin de linea.

La organización del texto en lineas permite estructurar los datos de entrara y salida, aprovechando los separadores de lineas para marcar la separación de los grupos de datos.

Para detectar los cambios de linea en el fichero de entrada del modulo InOut exporta una constante EOL (End Of line) de tipo carácter.

Si el carácter leído es igual a 'EOL' es que se ha saltado de linea

Lectura y escritura con conversión
Los ficheros de texto son el medio principal de combinación
entre el usuario y la maquina aplicamos este termino a cualquier medio de entrada o salida de secuencias de caracteres, incluyendo los terminales con pantalla y teclado...

La ventaja de los ficheros de texto es que prácticamente cualquier elemento de información puede representarse en forma legible mediante ristras de caracteres.

La lectura o escritura de estos valores a partir de ficheros de texto exige la conversión entre el valor interno, en el código de la maquina y su representación externa en forma de secuencia de caracteres.

Los procedimientos de lectura standard ReadInt', 'ReadCard'
y 'ReadReal'. Tienen el siguiente comportamiento:

Estas operaciones no son procedimientos predefinidos

Ficheros de acceso directo
Se denominan ficheros de acceso directo aquellos en que se puede acceder directamente a un elemento de información contenido en el fichero, sin necesidad de acceder a los anteriores.

Existen varios modelos lógicos diferentes de ficheros de acceso directo:

Solo estudiamos ficheros con organización relativa, también llamados 'Ficheros de acceso directo'

Las características de las operaciones desde acceso son:

El manejo de ficheros de acceso directo en Modula-2 no esta del todo normalizado. Existe un modulo estándar llamado FileSystem, que contiene las operaciones adecuadas para estos ficheros.