3. Les fichiers à accès direct
et leurs traitements en pascal


3. Fichiers à accès direct

3.1 Instructions Pascal/Delphi
3.2 Exercice sur l'accès direct
3.3 Fonctionnement de l'assistant


Retour au thème fichiers


3. Fichiers à accès direct

ans un fichier à accès direct, les enregistrements logiques sont accessibles immédiatement grâce à une clef. Il y a similitude avec la structure de tableau en mémoire centrale dans ce dernier cas la clef est l'indice de la cellule du tableau).

Nous disposerons généralement d'une fonction permettant de "transformer" un champ de l'enregistrement en une clef positionnant le pointeur de fichier directement sur la case physique associée.



3.1 Instructions Pascal/Delphi

n fichier de d'éléments de type T en pascal s'écrit :   file of  T. Les procédures et des fonctions de base du Pasca/Delphi permettant de travailler avec des fichiers séquentiels sont toutes utilisables pour un fichier à accès direct. Le Pasca/Delphi dispose d'une procédure supplémentaire permettant de positionner le pointeur de fichier.
 
Seek (  var F : file of  T ; N : longint ) positionne le pointeur sur l'enregistrement N (le premier enregistrement est numéroté 0).



3.2 Exercice sur l'accès direct

n propose un fichier de 9 enregistrements sur le disque 'C:\FicheCarac' :

Chaque enregistrement est de taille fixe (comportant 7  caractères), tous les enregistrements ont le même format : X / X // XX (où X est un caractère ASCII quelconque).

Nous nous proposons pour définir une clef d'accès à un enregistrement, d'utiliser le troisième caractère de l'enregistrement (ce qui autorise un fichier d'au plus 256 enregistrements). Nous supposons pour limiter l'exemple à peu de valeurs que les caractères ne sont que des lettres  (26 enregistrements au plus). Une clef d'accès sera une chaîne de caractère contenant par exemple en troisième position le même caractère que celui de l'enregistrement.

Nous décidons que la fonction de conversion de la clef (notée AccesDirect) est chargée de fournir en pascal à partir du troisième caractère de la clef, le numéro de l'enregistrement et de le passer à la procédure Seek.

Si nous prenons l'enregistrement suivant 'a / t // u w', les mots bateau, total, site, mythe, sont chacun d'entre eux des clefs permettant d'accéder à ce même enregistrement.

Plusieurs clefs peuvent adresser le même enregistrement :
AccesDirect : bateau ---> n° de l'enregistrement = k
AccesDirect : mythe ---> n° de l'enregistrement = k
etc...


Remarques :
 




3.3
Fonctionnement de l'assistant

'assistant propose de simuler l'exécution d'un programme pascal du moins en ce qui concerne le mode d'accès direct. Ci-dessous se trouve un détail des icônes de l'interfaces de l'assistant.

1°) Soit le programme pascal suivant comprenant une fonction AccesDirect de conversion de clef de type string en un entier qui est le rang de l'enregistrement asocié à cette clef  :

travaillant sur le fichier var Fichier : file of  string :

 

2°) Le logiciel propose par tirage aléatoire d'accéder grâce au programme pascal précédent à un enregistrement spécifique ( ici 'Q/G//BF', qui a pour rang 6 dans le fichier).

3°) Il vous est proposé un choix parmi 7 clefs générées aléatoirement, une seule des 7 est bonne et permet un accès à l'enregistrement  'Q/G//BF' :

4°) vous choisissez la bonne clef dans la liste (ici, c'est la chaîne qui contient le caractère G en troisème position, en l'occurence) :

5°) le logiciel vous averti par une approbation ou une désapprobation sonore de la justesse ou non de votre choix.

6°) Afin de tester votre bonne compréhension du mécanisme il vous est possible d'entrer des chaînes dans la petite fenêtre bleu simulant l'instruction readln(UneClef) ;

Si votre chaîne est une clef valide (ce qui est le cas ici) l'assistant vous indique l'enregistrement auquel cette clef permet d'accéder :

La saisie d'une clef invalide provoque l'affichage ci-dessous :

Utilisez l'assistant, qui engendre à chaque fois une configuration totalement différente de la précédente.