Descargar

Ficheros de datos en Delphi


    1. Resumen
    2. Desarrollo
    3. Conclusiones
    4. Bibliografía

    Resumen:

    En este artículo el autor describe como se crean y utilizan en Delphi los ficheros de datos en formato ASCII y en formato binario.

    Introducción:

    El procesamiento de datos implica con frecuencia el almacenamiento y manipulación de estos en ficheros, término que hace referencia a una colección de datos del mismo tipo que pueden ser almacenados en un dispositivo auxiliar de almacenamiento y a los que podemos acceder cuando sea necesario.

    En Delphi los ficheros pueden ser de dos tipos: ficheros en formato ASCII o ficheros en formato binario y pueden, a su vez, organizarse de dos formas diferentes: en forma secuencial o en forma indexada. En un fichero secuencial todos los componentes del fichero se almacenan secuencialmente uno después del otro.

    En este trabajo se aborda cómo se crean y utilizan en Delhi tanto los ficheros en formato ASCII como en formato binario organizados secuencialmente, ya que para almacenar datos con estructura indexada es mucho más cómodo hacerlo usando bases de datos, las cuales Delphi maneja a la perfección.

    Desarrollo:

    Ficheros en formato ASCII.

    Los ficheros en formato ASCII son los más sencillos de todos. Se pueden visualizar con el Bloc de Notas de Windows y suelen llevar extensión txt.

    Un fichero de este tipo puede definirse fácilmente declarando al identificador que lo representa de tipo texto. Esta declaración puede expresarse como:

    Var Nombre del fichero : TextFile

    Para leer o escribir datos en un fichero con formato ASCII se deben dar los siguientes pasos:

    1. Indicarle a Delphi que se trata de un fichero de tipo texto.
    2. Declarar las variables que se usarán para leer o escribir datos en el fichero. Estas variables deben ser de tipo String ya que se trata de un fichero en formato ASCII.
    3. Indicarle a Delphi como se llama el fichero y con que nombre se conocerá en el programa para lo cual se emplea la función AssignFile.
    4. Se abre el fichero en el modo en el que se desea trabajar:
    • Modo lectura. Se indica con la orden Reset.
    • Modo escritura para añadir datos. Se indica con la orden Append.
    • Modo reescritura para crear el fichero y si este existía con anterioridad sobrescribirlo. Se indica con la orden Rewrite.
    1. Cerrar el fichero una vez concluido el proceso de lectura o escritura. Se indica con la orden CloseFile.

    Ejemplo:

    Los siguientes procedimientos permiten crear el fichero Grupo, almacenar en él los nombres de los estudiantes que lo integran y recuperar luego el listado.

    Procedure CrearFichero;

    Var

    Datos : TextFile;

    begin

    AssignFile (Datos, 'Grupo.txt');

    Rewrite (Datos);

    CloseFile (Datos);

    end;

    Procedure EscribirDatos (Nombre : String);

    Var

    Datos : TextFile;

    begin

    AssignFile (Datos, 'Grupo.txt');

    Append (Datos);

    Writeln (Datos, Nombre);

    CloseFile (Datos);

    end;

    Procedure LeerDatos;

    Var

    Datos : TextFile;

    I : Integer;

    begin

    AssignFile (Datos, 'Grupo.txt');

    Reset (Datos);

    I := 1;

    While Not Eof (Datos) do

    begin

    Readln (Datos, Nombre[I]);

    Inc (I);

    end;

    CloseFile (Datos);

    end;

    Antes de usarlos, declare el arreglo Nombre de tipo String.

    La función Eof permite conocer si se llegó o no al final del fichero respondiendo True en caso positivo y False en caso contrario.

    Para conocer el número de registros que existen en un fichero, se puede utilizar la siguiente función:

    Function ContarRegistros : Integer;

    Var

    Cantidad : Integer;

    Datos : TextFile;

    Linea : String;

    begin

    Cantidad := 0;

    AssignFile (Datos, 'Grupo.txt');

    Reset (Datos);

    While Not Eof (Datos) do

    begin

    Readln (Datos, Linea);

    Inc (Cantidad);

    end;

    CloseFile (Datos);

    ContarRegistros := Cantidad;

    end;

    Ficheros en formato binario.

    Los ficheros en formato binario solo pueden ser leídos por el programa que los creó o por uno que se programe para leerlos. La manera más sencilla de definirlos es incluir la definición del fichero como parte de una declaración de variable de tipo fichero. La forma general de esta declaración es:

    Var Nombre del fichero : File of tipo

    donde tipo se refiere al tipo de dato de los componentes individuales del fichero.

    La ventaja con respecto a los ficheros en formato ASCII es que se puede contar con dos funciones que no existían en estos: FileSize y FilePos.

    La primera de ellas retorna el número de registros que existen en el fichero y la segunda la posición actual del puntero dentro del fichero.

    Los componentes individuales del fichero pueden ser de tipo simple o de tipo estructurado. En este último caso se debe declarar primero la estructura de datos y luego indicarle al fichero que use esa estructura.

    Ejemplo:

    Los siguientes procedimientos permiten crear el fichero Información, almacenar en él el nombre y el número del carné de identidad de un grupo de estudiantes y luego recuperar esa información.

    Procedure CrearFichero;

    Var

    Datos : File of TListado;

    begin

    AssignFile (Datos, ‘Informacion.fic’);

    Rewrite (Datos);

    CloseFile (Datos);

    end;

    Procedure EscribirDatos (NuevaInformacion : TListado);

    Var

    Datos : File of TListado;

    begin

    AssignFile (Datos, ‘Informacion. fic’);

    Reset (Datos);

    Seek (Datos,FileSize (Datos));

    Write (Datos, NuevaInformacion);

    CloseFile (Datos);

    end;

    Procedure LeerDatos;

    Var

    Datos : File of TListado;

    I : Integer;

    begin

    AssignFile (Datos, ‘Informacion. fic’);

    Reset (Datos);

    For I := 1 to FileSize (Datos) do

    Read (Datos, Listado [I]);

    CloseFile (Datos);

    end;

    Antes de usarlos declare el tipo de dato TListado.

    Type

    TListado = Record

    Nombre : String [50];

    NumeroIdentidad : Real;

    end;

    y la variable Listado como un arreglo de tipo Tlistado.

    La función Seek permite recorrer el fichero avanzando el puntero dentro del mismo.

    Para copiar el contenido de un fichero en otro, se puede utilizar el siguiente procedimiento:

    Procedure CopiarFichero;

    Var

    FicheroOrigen, FicheroDestino : File of TListado;

    Contenido : TListado;

    begin

    AssignFile (FicheroOrigen, ‘Informacion.fic');

    Reset (FicheroOrigen);

    AssignFile (FicheroDestino, 'Copia.fic');

    Rewrite (FicheroDestino);

    While Not Eof (FicheroOrigen) do

    begin

    Read (FicheroOrigen, Contenido);

    Write (FicheroDestino, Contenido);

    end;

    CloseFile (FicheroOrigen);

    CloseFile(FicheroDestino);

    end;

    se puede adaptar el procedimiento anterior para que solo copie parte del contenido, estableciendo antes de la instrucción Write el criterio de validación.

    Ejemplo:

    Para copiar solo los que nacieron en el año 1990, el criterio de validación podría ser:

    If Copy (FloatToStr (Contenido.NumeroIdentidad),1,2) = '90' then

    por lo que el bloque While quedaría:

    While Not Eof (FicheroOrigen) do

    begin

    Read (FicheroOrigen, Contenido);

    If Copy (FloatToStr (Contenido.NumeroIdentidad),1,2) = '90' then

    Write (FicheroDestino, Contenido);

    end;

    Otra función útil en el manejo de ficheros es la función FileExists con la que es posible conocer si un fichero determinado existe o no.

    Conclusiones:

    La utilización de ficheros de datos facilita el intercambio de información entre programas por lo que puede ser una buena opción para la entrada y salida de la información en nuestras aplicaciones.

    Bibliografía:

    Gottfried, Byron S. Programación en Pascal.– Ciudad de la Habana : Editorial Pueblo y Educación, 1989

    Katrib Mora, Miguel. Lenguajes de programación y Técnicas de compilación.– Ciudad de la Habana : Editorial Pueblo y Educación, 1988

    Curso por correo electrónico sobre Borland Delphi.

     

     

    Autor:

    Asistente Juan Antonio Fonseca Hernández