menu
  Home  ==>  articles  ==>  colibri_helpers  ==>  u_c_file_of   

u_c_file_of - John COLIBRI.


1 - Introduction

La classe c_file_of encapsule la gestion des fichiers FILE OF. Elle permet surtout les manipulations globales d'ouvertures, fermeture, changement de nom. Pour cela, la classe dérive de c_basic_file.

Cette classe ne contient pas le RECORD final: seul l'utilisateur sait ce qu'il placera dans son enregistrement. C'est pourquoi cette classe est essentiellement destinée à être surchargée, comme le montreront les exemples ci dessous.


2 - Utilisation

2.1 Interface

L'interface cd c_file_of est la suivante:

    type c_file_ofclass(c_basic_file)
                      public
                        m_pt_recordPointer;
                        m_record_sizeInteger;
                        m_current_positionInteger;

                        Constructor create_file_of(p_namep_file_nameString;
                            p_pt_recordPointerp_record_sizeInteger); Virtual;

                        function f_file_sizeIntegerOverride;
                        function f_file_positionIntegerOverride;
                        procedure seek_file(p_positionInteger); Override;
                        function f_seek_end_of_fileIntegerOverride;

                        procedure write_record;
                        procedure read_record;

                        function f_display_recordStringVirtual;
                        function f_listBoolean;

                        Destructor DestroyOverride;
                      end;

Cette classe descend de c_basic_file qui gère toutes les ouvertures, fermetures, dupplications etc.

Pour les attributs:

  • m_pt_record: un pointeur qui sera initialisé vers le RECORD que la classe c_file_of écrira ou lira. Le pointeur sera initialisé par le descendant lorsqu'il appellera le constructeur de c_file_of.
  • m_record_size: la taille du RECORD du descendant. Initialisé de même par le descendant
  • m_current_position: une variable qui sera utilisée au besoin (NON mise à jour automatiquement dans cette version)
Et pour les méthodes:
  • create_file_of: appelle le CONSTRUCTOR de c_basic_file, et initialise m_pt_record et m_record_size
  • les fonctions suivantes sont les versions dérivées de c_basic_file, mais adaptées à la gestion par RECORD (et non pas par octet):
    • f_file_size: le nombre d'enregistrement
    • f_file_position: la position (en RECORD)
    • seek_file et f_seek_end_of_file: positionnement
  • write_record: écriture de m_pt_record^ (dans le RECORD de la classe descendante)
  • read_record: écriture de m_pt_record^;
  • f_display_record: affichage standard de mise au point
  • function: ouverture, affichage standard, fermeture
  • Destroy: libération de la classe (PAS du record utilisateur)

2.2 Exemple d'utilisation simple

C'est quasiment toujours une classe dérivée de celle-ci qui est utilisée. En effet, cette classe ne contient pas le RECORD.

Voici tout d'abord un exemple de classe dérivée permettant de gérer des Integer:

unit u_c_file_of_integer;
  interface
    uses u_c_file_of;

    type t_integer_recordRecord
                             m_integerInteger;
                           end;

         c_file_of_integerclass(c_file_of)
                              public
                                m_integer_recordt_integer_record;

                                Constructor create_file_of_integer(p_namep_file_nameString); Virtual;
                                function f_display_recordStringOverride;
                              end;

  implementation
    uses SysUtilsWindowsu_c_display;

    // -- c_file_of_integer

    Constructor c_file_of_integer.create_file_of_integer(p_namep_file_nameString);
      begin
        Inherited create_file_of(p_namep_file_name,
            @ m_integer_recordSizeOf(m_integer_record));
      end// create_file_of_integer

    function c_file_of_integer.f_display_recordString;
      begin
        with m_integer_record do
          Result:= IntToStr(m_integer);
      end// f_display_record

    begin // u_c_file_of_integer
    end// 

Notez que:

  • l'unité définit le type de RECORD t_integer_record
  • la classe c_integer_file:
    • descend bien de c_file_of
    • contient un attribut pour le champ, m_integer_record
    • n'a que deux méthodes:
      • le CONSTRUCTOR, dont le code appelle le CONSTRUCTOR de c_file_of en lui fournissant l'address du champ m_integer_record et sa taille
      • la procédure d'affichage qui dépend du contenu du RECORD

2.3 Utilisation générale

Le plus simple est de partir de u_c_integer_file, et de changer "integer" par le nom correspondant à votre application.

2.4 - Répertoires et Directives de Compilation

L'unité est prévue pour être placée dans:

C:
  programs
    colibri_helpers
      classes

Vous pouvez naturellement changer cette organisation par Projet | Options | Directories

Les directives de compilation sont:

  • R+ (vérification des intervalles)
  • S+ (vérification de la pile)
  • pas d'optimisation

3 - Programmation

Rien de particulier. La classe s'appuie essentiellement sur la classe u_c_basic_file.


4 - Améliorations

Cette classe est surtout utilisée:
  • car elle bénéficie des traitements de test d'existence, changement de nom etc présents dans c_basic_file
  • elle est le point de départ pour l'encapsulation d'organisations de fichier plus complexes (voir c_string_file: l'exemple d'encapsulation d'un fichier de taille variable).

5 - Télécharger le source

Vous pouvez télécharger:
  • u_c_file_of.zip: l'unité de gestion de fiches de taille fixe (1 K)
  • test_u_c_file_of.zip le projet de test (18 K) qui contient:
    • l'unité
    • toutes les unités qu'elle utilise
    • le projet de démonstration
Avec les mentions d'usage:
  • j'apprécie tous les commentaires, remarques ou critiques
  • signalez-moi les bugs que vous trouverez.

L'auteur

John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le conseil (composants, architecture, test) et la formation. Son site contient des articles avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client.
Created: jan-04. Last updated: mar-2020 - 250 articles, 620 .ZIP sources, 3303 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2020
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
    + web_internet_sockets
    + services_web_
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
    + colibri_helpers
      – u_types_constants
      – u_strings
      – u_loaded
      – u_c_basic_object
      – u_c_display
      – u_dir
      – u_file
      – u_display_hex
      – u_c_file_name
      – u_c_basic_file
      – u_c_log
      – u_c_line
      – handle_files
      – u_c_path_segments
      – u_c_text_file
      – u_c_direct_acccess
      – u_c_string_file
      – u_c_file_of
    + colibri_skelettons
    + admin
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog