|
u_c_file_of - John COLIBRI.
|
- mots clé:utilitaire - gestion de fichier - fiche de taille fixe
- logiciel utilisé: Windows 98, Delphi 5.0
- matériel utilisé: Pentium 500Mhz, 128 M de mémoire
- champ d'application: Delphi 1 à 6 sur Windows, Kylix
- niveau: débutant en Pascal et Delphi
- uses: u_c_basic_file, u_c_display, (u_c_basic_object,
u_c_file_name, u_loaded, u_dir, u_c_log, u_strings,
u_types_constants)
- plan:
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_of= class(c_basic_file)
public
m_pt_record: Pointer;
m_record_size: Integer;
m_current_position: Integer;
Constructor create_file_of(p_name, p_file_name: String;
p_pt_record: Pointer; p_record_size: Integer); Virtual;
function f_file_size: Integer; Override;
function f_file_position: Integer; Override;
procedure seek_file(p_position: Integer); Override;
function f_seek_end_of_file: Integer; Override;
procedure write_record;
procedure read_record;
function f_display_record: String; Virtual;
function f_list: Boolean;
Destructor Destroy; Override;
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_record= Record
m_integer: Integer;
end;
c_file_of_integer= class(c_file_of)
public
m_integer_record: t_integer_record;
Constructor create_file_of_integer(p_name, p_file_name: String); Virtual;
function f_display_record: String; Override;
end;
implementation
uses SysUtils, Windows, u_c_display;
// -- c_file_of_integer
Constructor c_file_of_integer.create_file_of_integer(p_name, p_file_name: String);
begin
Inherited create_file_of(p_name, p_file_name,
@ m_integer_record, SizeOf(m_integer_record));
end; // create_file_of_integer
function c_file_of_integer.f_display_record: String;
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 (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 la
développement de projets pour
ses clients, le conseil 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, Ado.Net, Asp.Net et UML qu'il
anime personellement tous les mois, à Paris, en province ou sur site client.
|