AnteriorPosterior

Tema 11: Manejo de ficheros (1: Leer ficheros de texto)

  Curso: Curso de Pascal, por Nacho Cabanes

Curso de Pascal. Tema 11: Manejo de ficheros.

Tema 11.1. Manejo de ficheros (1) - leer un fichero de texto.

Ahora vamos a ver cómo podemos leer ficheros y crear los nuestros propios. Voy a dividir este tema en varias partes: primero veremos como manejar los ficheros de texto, luego los ficheros "con tipo" (que usaremos para hacer una pequeña agenda), y finalmente los ficheros "generales".

Las diferencias entre las dos últimas clases de fichero pueden parecer poco claras ahora e incluso en el próximo apartado, pero en cuanto hayamos visto todos los tipos de ficheros se comprenderá bien cuando usar unos y otros, así que de momento no adelanto más.

Vayamos a lo que nos interesa hoy: un fichero de texto. Es un fichero formado por caracteres (letras) normales, que dan lugar a líneas de texto legible.

Si escribimos TYPE AUTOEXEC.BAT desde el DOS, veremos que se nos muestra el contenido de este fichero: una serie de líneas de texto que, al menos, se pueden leer (aunque comprender bien lo que hace cada una es todo un mundo ;-) ).

En cambio, si hacemos TYPE COMMAND.COM, aparecerán caracteres raros, se oirá algún que otro pitido... es porque es un fichero ejecutable, que no contiene texto, sino una serie de instrucciones para el ordenador, que nosotros normalmente no sabremos descifrar.

Casi salta a la vista que los ficheros del primer tipo, los de texto, van a ser más fáciles de tratar que los "ficheros en general". Hasta cierto punto es así, y por eso es por lo que vamos a empezar por ellos.

Me voy a centrar en el manejo de ficheros con Turbo Pascal y versiones posteriores (lo poco que hice en Pascal estándar con las órdenes "get" y "put" me cansó lo bastante como para no dar el latazo ahora a no ser que alguien realmente necesite usarlos). Si alguien encuentra problemas con algun otro compilador, que lo diga...

Para acceder a un fichero, hay que seguir unos cuantos pasos:

1- Declarar el fichero junto con las demás variables.
2- Asignarle un nombre.
3- Abrirlo, con la intención de leer, escribir o añadir.
4- Trabajar con él.
5- Cerrarlo.

La mejor forma de verlo es con un ejemplo. Vamos a imitar el funcionamiento de la orden del DOS anterior: TYPE AUTOEXEC.BAT.

 {--------------------------}
 {  Ejemplo en Pascal:      }
 {                          }
 {    Muestra AUTOEXEC.BAT  }
 {    MAEXEC1.PAS           }
 {                          }
 {  Este fuente procede de  }
 {  CUPAS, curso de Pascal  }
 {  por Nacho Cabanes       }
 {                          }
 {  Comprobado con:         }
 {    - Turbo Pascal 7.0    }
 {    - Free Pascal 2.0.2   }
 {--------------------------}

program MuestraAutoexec;
var fichero: text; (* Fichero de texto *) linea: string; (* Línea que leemos *)
begin assign( fichero, 'C:\AUTOEXEC.BAT' ); (* Le asignamos el nombre *) reset( fichero ); (* Lo abrimos para lectura *) while not eof( fichero ) do (* Mientras que no se acabe *) begin readln( fichero, linea ); (* Leemos una línea *) writeln( linea ); (* y la mostramos *) end; close( fichero ); (* Se acabó: lo cerramos *) end.

Eso es todo. Confío en que sea bastante autoexplicativo, pero aun así vamos a comentar algunas cosas:

  • text es el tipo de datos que corresponde a un fichero de texto.
  • assign es la orden que se encarga de asignar un nombre físico al fichero que acabamos de declarar.
  • reset abre un fichero para lectura. El fichero debe existir, o el programa se interrumpirá avisando con un mensaje de error.
  • eof es una función booleana que devuelve TRUE (cierto) si se ha llegado ya al final del fichero (end of file).
  • Se leen datos con read o readln igual que cuando se introducían por el teclado. La única diferencia es que debemos indicar desde qué fichero se lee, como aparece en el ejemplo.
  • El fichero se cierra con close. No cerrar un fichero puede suponer no guardar los últimos cambios o incluso perder la información que contiene.


Si alguien usa Delphi, alguna de esas órdenes no se comporta exactamente igual. Al final de este tema veremos las diferencias.

Actualizado el: 28-07-2006 22:06

AnteriorPosterior