Abrir archivos en Pascal: GPC y FPC

Abrir un archivo en Pascal no es tan sencillo como pueda parecer porque cada implementación del lenguaje lo hará a su manera. En GNU Pascal Estándar Ampliado (ISO 10206), se deben programar unas funciones que hagan el trabajo sucio. También he contemplado la posibilidad de que el archivo no exista previamente en el directorio del programa y por eso hay dos funciones muy similares: ExisteFicheroTexto y EnlazaFicheroTexto. Aquí está el código:

function ExisteFicheroTexto (nombre: tNombreFichero): boolean;
{Objetivo: Comprueba si existe un fichero con nombre tNombreFichero
 PreCD: El fichero es externo (bindable)
 PosCD: Devuelve TRUE si existe o sino FALSE}
var b: bindingtype; f: tFicheroTexto;
begin
   unbind (f);   {desenlaza f de enlaces previos si hay}
   b := binding (f);   {ínicia b}
   b.name := nombre;
   bind (f, b);   {enlaza la variable f con el fichero argumento}
   b := binding (f);   {actualiza b}
   ExisteFicheroTexto := b.existing;
end;

function EnlazaFicheroTexto (var f: tFicheroTexto; nombre: tNombreFichero): boolean;
{Objetivo: Enlaza un fichero tFicheroTexto
 PreCD: El fichero es externo (bindable)
 PosCD: Devuelve TRUE si ha podido enlazarlo o sino FALSE}
var b: bindingtype;
begin
   unbind (f);   {desenlaza f de enlaces previos si hay}
   b := binding (f);   {inicia b}
   b.name := nombre;
   bind (f, b);   {enlaza la variable f con el fichero argumento}
   b := binding (f);   {actualiza b}
   EnlazaFicheroTexto := b.bound;
end;

En FreePascal la cosa es mucho más simple, bastará con utilizar la librería sysutils y dos palabras reservadas: FileExists y Assign. El código para un archivo prueba.txt sería:

if FileExists ('prueba.txt')
then begin
   {$i-} {Desactiva la comprobacion de errores de entrada/salida}
   assign(f, 'prueba.txt');
   {$i+} {Activa la comprobacion de errores de entrada/salida}
   if (IoResult 0)
   then begin
     writeln('Fichero prueba.txt no enlazado');
     halt(1); {Termina el programa}
   end
   else writeln ('Fichero prueba.txt enlazado');
end
else writeln ('Fichero prueba.txt no existe');

He subido el código fuente de los dos programas para abrir ficheros a modo ejemplo en los que esto se puede ver más detalladamente. Están comprimidos en ficheros-pascal.tar.gz.

Anuncios

6 pensamientos en “Abrir archivos en Pascal: GPC y FPC

  1. Hola, soy una estudiante de 1º de informática que acaba de empezar y,como he encontrado tu blog y he estado viendo que te manejas justo en el lenguaje que nos piden en programación (Pascal ISO 10206).
    Gracias por subir la información y,bueno, si pudieras enseñarnos cuáles fueron tus errores iniciales para que pudiéramos aprender de ellos,igual lo que digo es un tanto absurdo,pero bueno ^-^U….
    Gracias por tu paciencia.Espero con ansia tu respuesta.
    Saludos.

    Me gusta

    • Hola PeliPepper,

      Es muy interesante lo que me preguntas porque, efectivamente, errores de principiante he cometido hasta la saciedad. Como da para mucho, haré una entrada en un par de días sobre este tema, pero por ahora te dejo con algunos consejos:
      1) Al principio lo importante es hacer muchos ejercicios pequeños. En algunos debes practicar bucles, en otros condicionales… El objetivo es acostumbrarse a escribir la sintaxis correctamente y a escribir condiciones correctamente (de fin de bucle o de decisión en los “if”).
      2) Visto con perspectiva, también creo que es muy importante acostumbrarse a depurar errores. Es en lo que más tiempo se acaba invirtiendo, así que conviene estar ágil. Si practicas mucho lo que te decía en el punto anterior, probablemente detectes los errores con más facilidad de ahí en adelante.
      3) Hay que acostumbrarse a almacenar (que no memorizar) las cosas que estén bien hechas para reutilizarlas siempre que sea posible y ahorrar tiempo programando. Si yo tengo un bucle que sé a ciencia cierta que se ejecuta hasta que se da cierta condición o hasta llegar a un tope de iteraciones, debería poder aprovecharlo siempre que fuese necesario.
      4) Programar implica leer y escribir código. Practicar, practicar y practicar. Y pelearse con ese código. De nada vale que alguien te lo arregle y más o menos le eches un vistazo. En mi caso, procuré que nunca ningún compañero me cambiase mi código. Como mucho, les dejaba que me lo explicasen de palabra, pero luego dependes de ti mismo/a. Esto es importantísimo porque si no eres capaz de detectar errores en tu propio código cuando estás abordando un problema, menos aún serás capaz de detectar errores o entender el código de otra persona tiempo después, cuando te encuentres en una corrección, en un examen, etc.
      5) Y por último, hay que quitarse el miedo y ponerse manos a la obra. Da pereza, uno va un poco a ciegas, es aburrido y/o repetitivo… ninguna de esas frases te va a ayudar. Creo que fue Thomas Edison quién dijo aquello de “El genio es 10% inspiración y 90% perseveración”. Y es totalmente cierto. Mi mejor consejo es que le dediques todo el tiempo que puedas. Que te pongas tus propios ejercicios y metas. ¿Soy capaz de hacer un programa que me pregunte quien soy o qué tiempo hace? ¿Soy capaz de hacer un programa que almacene los teléfonos de mis amigos? ¿Soy capaz de que además almacene los teléfonos en un fichero? Vete paso a paso, poco a poco, y verás como todo te va saliendo. Persevera.

      Un saludo y nos vemos en ese post dentro de unos días!

      Me gusta

  2. Compartiré tu blog con mis compañeros,que andamos todos un poco aturdidos con el cambio de un bachillerato bastante triste a una carrera bastante dura.
    Gracias por tu atención y espero con ilusión tu entrada al blog.
    Saludos *w*!!

    Me gusta

  3. Mis errores de principiante al programar | Emilio Devesa

  4. 2013 de un plumazo! | Emilio Devesa

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s