Chapitre 6 FICHIERS A la fin de cette partie, vous serez capable de: • Utiliser

Chapitre 6 FICHIERS A la fin de cette partie, vous serez capable de: • Utiliser à bon escient les différents types de chaînes de caractères; • Utiliser les différentes routines de traitement des chaînes de caractères; 6.1 Différentes sortes de fichiers Dans les chapitres précédents nous avons introduit des types de données divers, mais dont la particularité était de ne pas trop dépendre du support physique, si ce n'est pour la précision des nombres ou pour la place mémoire nécessaire aux variables que l'on peut déclarer avec de tels types. Afin de pallier la limite imposée par la taille mémoire centrale, mais aussi et surtout de permettre le stockage des informations produites ou modifiées par le programme, le moyen le plus adéquat est l'utilisation des fichiers. Un fichier est une collection d'informations, enregistrées sur un support physique de mémoire secondaire (mémoire de masse). Il est défini par un identificateur et des attributs tels que le type, les conditions et les méthodes d'accès. Les fichiers sont, de plus, gérés par le système d'exploitation et accessibles par l'intermédiaire de celui-ci. Delphi dispose de plusieurs possibilités d'enregistrement de données dans des fichiers: • Les fichiers dans leur forme traditionnelle • Les fichiers liés et supportés par la VCL, offerts par différentes classes (Tstream. Tcomponent,…) ou supportés par des méthodes de plusieurs composants • Les fichiers inhérents à l'utilisation de bases de données Dans ce chapitre nous nous attacherons essentiellement à l'étude des fichiers de la première catégorie. Parmi ceux-ci nous nous arrêterons sur: • Les fichiers de type texte (ou fichiers ASCII) • Les fichiers à accès direct (ou fichiers typés) • Les fichiers non typés Avant d'examiner les caractéristiques de ces différents types de fichiers, voyons ce qu'ils ont en commun. La notion de fichier recouvre deux objets distincts: un identificateur (nom interne) défini dans un programme et le fichier physique géré par le système d'exploitation (associé à un nom externe). Afin qu'un programme puisse gérer un fichier, ces deux noms doivent être mis en relation par la procédure AssignFile (NomInterne, NomExterne). Lorsque l'utilisation du fichier est terminée, il doit être fermé à l'aide de la procédure CloseFile (NomInterne). Entre ces deux opérations, diverses procédures et fonctions prédéfinies relatives aux fichiers peuvent être utilisées. La gestion de fichiers, autrement dit la gestion des informations qu'ils contiennent, est un domaine important de la programmation. Toutefois, Delphi met à disposition du programmeur des outils permettant parfois de masquer l'utilisation explicite des fichiers. Delphi (J-C Armici janvier 2003 www.unvrai.com) page 4-1 6.2 Fichiers de type texte Ces fichiers, appel‚s aussi "fichiers ASCII", sont constitués par une suite de caractères groupés en lignes, comme dans un texte. Chaque ligne est terminée par la séquence de caractères CR et LF (Carriage Return et Line Feed), correspondant à un passage au début de la ligne suivante. L'accès à ce type de fichiers peut s'effectuer uniquement de manière séquentielle, c'est-à-dire un élément après l'autre, en partant du premier. Leur contenu peut être visualisé en les chargeant dans un éditeur de texte, par exemple le blocnote (Notepad) de Windows. Nous allons passer en revue et illustrer quelques-unes unes des instructions relatives aux fichiers de type texte. Déclaration de fichier Le mot réservé TextFile est utilisé pour déclarer des fichiers de type texte: var fichier_texte : TextFile; Assignation de fichier La procédure AssignFile permet de relier la variable constituant le nom interne du fichier au fichier proprement dit, spécifié par le chemin permettant de le retrouvé sur un disque: AssignFile (fichier_texte, 'C:\AUTOEXEC.BAT'); Ouverture de fichier Après avoir été assigné, un fichier doit encore être ouvert. Cette opération est réalisée par l'une des deux procédures prédéfinies: rewrite (fichier_texte); reset (fichier_texte); La procédure rewrite ouvre un nouveau fichier en vue d'une opération d'écriture .Si un fichier du même nom existe, il sera détruit et son contenu perdu. La procédure reset ouvre un fichier existant en vue d'une opération de lecture ou d'écriture. Lors de l'appel à cette procédure, une erreur d'entrée-sortie est signalée si le fichier spécifié est absent. Ecriture d'informations Les deux procédures permettant d'enregistrer des données dans un fichier sont write et writeln. Le premier paramètre qui leur est transmis est l'identificateur du fichier: write (fichier_texte, 'Voic un début de ligne '); writeln (fichier_texte, ' puis on saute à la ligne suivante.'); Lecture d'informations De manière analogue, les procédures read et readln sont utilisées pour la lecture des données placées dans un fichier de type texte. L'exemple qui suit, illustre la lecture du contenu d'un fichier et son affichage; ligne par ligne dans un composant de type Memo. De plus, le nom du fichier ainsi que le nombre de lignes sont également affichés. Delphi (J-C Armici janvier 2003 www.unvrai.com) page 4-2 Voici comment se présente le fiche de ce projet. Elle comporte: • Un Label permettant l'affichage du nom du fichier • Un Memo dans lequel le contenu du fichier est placé • Un Label indiquant le nombre de lignes lues • Un bouton qui déclenche le choix du fichier et l'affichage de son contenu • Un OpenDialog (dialogue d'ouverture de fichier) permettant de choisir le fichier à lire Delphi (J-C Armici janvier 2003 www.unvrai.com) page 4-3 Voici enfin comment est écrit le programme: unit uftxt1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFtexte = class(TForm) Memo: TMemo; nomf: TLabel; OD: TOpenDialog; lignes: TLabel; Lire: TButton; procedure LireClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Ftexte: TFtexte; implementation {$R *.DFM} procedure TFtexte.LireClick(Sender: TObject); var f : TextFile; { fichier texte } ligne : string; { ligne lue } nbl : integer; { compteur du nombre de lignes } begin nbl := 0; if OD.execute then begin nomf.caption := OD.FileName; AssignFile (f, OD.FileName); Reset (f); while not eof (f) do begin readln (f, ligne); Memo.Lines.Add (ligne); inc (nbl); end; CloseFile (f); lignes.caption := inttostr (nbl); end; end; end. Le cœur du programme est constitué par les lignes suivantes: AssignFile (f, OD.FileName); Reset (f); while not eof (f) do begin readln (f, ligne); Memo.Lines.Add (ligne); inc (nbl); end; CloseFile (f); Delphi (J-C Armici janvier 2003 www.unvrai.com) page 4-4 Fin de ligne La fonction Eoln retourne une valeur booléenne indiquant si la fin d'une ligne (End Of Line) est atteinte. Dans le fragment de programme suivant, la lecture d'un fichier texte s'effectue caractère par caractère à l'aide de la procédure read et, à chaque détection de la fin d'une ligne, un bip est émis: AssignFile (f, OD.FileName); Reset (f); while not eof (f) do begin read (f, caractere); { on lit un caractère } if eoln (f) then MessageBeep (0); { bip standard } end; CloseFile (f); Fin de fichier La fonction Eof retourne une valeur booléenne indiquant si la fin du fichier (End Of File) est atteinte. Fermeture de fichier Il est fortement conseillé de fermer tous les fichiers ouverts, à l'aide de la procédure CloseFile, avant la fin de l'exécution d'un programme: CloseFile (fichier_texte); 6.3 Fichiers à accès direct Ces fichiers sont structurés en éléments ou enregistrements (record) dont le type peut être quelconque. Les éléments d'un fichier à accès direct se suivent logiquement, mais pas forcément physiquement; ils ont tous la même taille. Le terme accès direct signifie qu'il est possible d'accéder directement à n'importe quel élément, pour autant que l'on spécifie son rang. Voici un exemple de déclarations liées au traitement d'un fichier à accès direct: type element = record nom : string[12]; age : integer; end; var personne : element; f : file of element; Le schéma suivant illustre l'organisation logique des premiers enregistrements du fichier f: rang 0 1 2 3 Durant Mercier César Alex 24 44 37 67 Delphi (J-C Armici janvier 2003 www.unvrai.com) page 4-5 La flèche symbolise le pointeur de fichier. Chaque enregistrement d'un fichier à accès direct peut être accédé en spécifiant son rang. Un pointeur de fichier mémorise le rang de l'enregistrement concerné par la prochaine opération de lecture ou d'écriture. Lorsqu'un fichier est ouvert, son pointeur indique l'enregistrement de rang zéro, c'est-à-dire le premier enregistrement. Après chaque opération de lecture ou d'écriture, le pointeur de fichier est incrémenté du nombre d'enregistrements lus ou écrits. Un enregistrement est l'unité minimale de transfert d'information entre un fichier et un programme. Le contenu des fichiers à accès direct est stocké sous forme binaire compactée et n'est donc pas directement affichable à l'écran. Il est également important de savoir que l'on peut accéder de manière séquentielle à un fichier à accès direct. Très souvent les éléments d'un fichier à accès direct sont de type enregistrement. Déclaration du type de fichier La déclaration d'un fichier à accès direct est effectuée à l'aide des mots réservés file of: type client = record code : string[10]; nom : string[40]; solde : real; premiere_facture : integer; derniere_facture : integer; end; var fichier_client : file of client; un_client : client; ch : char; En plus d'une variable de type fichier, il faut définir une variable dont le type est celui des éléments de ce fichier. Cette dernière (un_client) est utilisée uploads/s1/ delphi-chap-6.pdf

  • 39
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Dec 17, 2022
  • Catégorie Administration
  • Langue French
  • Taille du fichier 0.3579MB