vendredi 10 août 2012

Les Fichiers

Les Fichiers 


La lecture de fichier et table, l'écriture de fichiers (Entrées/sorties)
La lecture et l'écriture (les entrées/sorties) des fichiers utilisent les instructions lire() et écrire().
Implicitement, on utilisera lire et écrire pour un fichier et saisir et afficher pour le clavier et l'écran.
Ces instructions traitent un enregistrement complet (tous les champs de la ligne en une seule fois)
Lire enregFichier
Ecrire enregFichier

A la lecture de l'enregistrement, les variables affectées sont celles déclarées dans l'enregistrement (ici enregFichier) à la déclaration du fichier et sont directement exploitables.
D'où la nécessité de décrire l'enregistrement d'un fichier ou une structure de données pour les tables.

Pour effacer un enregistrement dans un fichier, on utilise l'instruction supprimer
Supprimer enregFichier
Cette fonction ne supprime que l'enregistrement lu en dernier.

Pour modifier un enregistrement dans un fichier, on utilise l'instruction modifier
Modifier enregFichier
Cette fonction ne modifie que l'enregistrement lu en dernier, mais tout l'enregistrement (annule et remplace).

Note : dans certains langages, on ne peut pas effacer dans un fichier (ouille!). Pour faire quelque chose qui y ressemble, on va copier un fichier vers un autre en omettant ("oubliant") les éléments à effacer (c'est similaire à combler les "trous" dans un tableau, voir l'exemple correspondant).

Lire dans une table de BDD
Si lire est utilisable pour les tables comme pour les fichiers, on ne peut pas utiliser écrire, ni supprimer, ni modifier avec les tables. Il faut passer par une requête qui fait le boulot. Voir les exemples.

Autres conventions d'écriture de l'instruction lire()
Dans certains cas nous utiliserons lire() sous les formes suivantes :
Certains langages demandent d'indiquer la source et la destination comme suit :
Lire(nomIdentifiantLeFichierOuLaTable, variableRecevantLeRésultat)
Ecrire(nomIdentifiantLeFichier, variableEnregistrementAEcrire)
ou
lire 1 ligne du fichier & l'affecter à la variable enreg.
enreg  <- Lire(nomIdentifiantLeFichierOuLaRequête)
ou
enreg  <- Lire(nomIdentifiantLeFichierOuLaRequête, longueurEnreg)
Idem ci dessus, mais on indique la longueur de l'enregistrement (var. longueurEnreg) sous-entendant que lire ne sait pas déterminer automatiquement la longueur d'un enregistrement.


Ces autres conventions dépendent du langage avec lequel le développeur à pour habitude de programmer.

L'ouverture et la fermeture
Avant de lire un livre, il faut l'ouvrir. Après avoir lu un livre, il faut le fermer (sous peine de l'abîmer)
De la même façon, on va déclarer l'ouverture d'un fichier, le traiter puis le refermer comme suit :
Ouvrir 'nom_du_fichier' en mode_accès
Fermer 'nom_du_fichier'

la variable fichierOuvert contiendra un numéro qui permettra d'accéder au fichier par lire() et écrire().
Ce numéro est unique pour chaque ouverture et évite de confondre le fichiers lors d'une lecture alors que plusieurs fichiers sont ouverts.

Exemple :
Procédure copier(nomF1 : chaîne, nomF2 : chaîne)
/* Description : copie d'un fichier.
Les fichiers F1 et F2 doivent avoir la même forme d'enregistrement
Et sont déclarés dans l'algo appelant de copier, si besoin
*/
var // Déclarations …
début // Corps
Ouvrir 'nomF1' en lecture
Ouvrir 'nomF2' en écriture
Lire enregF1
TantQue non fin de nomF1
enregF2 <- enregF1
Ecrire enregF2
Lire enregF1
FinTantQue
Fermer 'nomF2'
Fermer 'nomF1'
Fin
Remarquez l'imbrication des ouvertures et fermetures : ouvrir F1 puis F2, fermer F2 puis F1.

Attention : lors de l'ouverture, il faut impérativement indiquer le mode d'accès au fichier. Il y en a trois : lecture, écriture et lecture/écriture.

Ecriture dans une base de données
Dans une base de données, on écrit, modifie ou supprime à l'aide de requêtes SQL …
Voir le cours 2 sur le SQL (insert, delete, update).

Déclaration d'un fichier, d'une table de BDD
Un fichier doit être déclaré et on doit indiquer son contenu, sa structure.
Exemple :
Fichier personnes enregistrement enreg_personnes
Num : entier
Nom : chaîne
Prénom : chaîne
finEnregistrement

Le mot clé "fichier" peut être remplacé par "table"

Une table de base de données ne doit pas être déclarée mais on utilisera une variable structurée pour contenir un enregistrement de la table.
Structure Personne
Num : entier
Nom : chaîne
Prénom : chaîne
finStructure
on récupérera individuellement chaque champ lors de la lecture de chaque ligne de la table, mais une structure simplifiera son utilisation et donnera un code plus "propre".

PRESENTATION DES FICHIERS
Fichier de données
Rappel : Un fichier de données est un ensemble d’informations (enregistrements) habituellement de même forme (même structure de données) stocké de façon durable sur un support physique (mémoire de masse).

On peut donc se représenter le classique bac à fiche (représentation du fichier), à l’intérieur duquel on trouve des fiches(représentation de l’enregistrement du fichier).
Illustration
Représentation graphique

Le fichier physique est stocké sur une mémoire de masse et porte le nom de Fich_Personne.don dans le système de gestion des fichiers.
Le programme qui utilise le fichier physique déclare un fichier logique FICHPERS d'enregistrement ENRPERS qui correspond à la structure du fichier physique.
À l'ouverture du fichier par le programme s'établit une communication entre le fichier logique et le fichier physique en mode lecture ou/et écriture.
Programme exécutable  (en mémoire centrale)
FICHPERS (fichier)
ENRPERS (enregistrement)

Nom Prenom Age  
 
« Fich_Personne.don »

Nom Prenom Age  
BANDE Anna 17  
BOIDE Olivier 18  
CROQUE Odile 19  
HAMME Elie 17  
HAMME Eric 20  
HUN Sandie 16  
: : :
lecture
écriture
Mémoire de masse

 Lexique algorithmique

Type   TypPERS =    structure                                 {structure de l'enregistrement}
                                  NOM, PRENOM (chaîne)
                                  AGE (entier)
                             Fin structure
Variable
     FICHPERS (fichier séquentiel de TypPRES)          {fichier logique  des personnes}
     ENRPERS (TypPRES)                                         {enregistrement d'une personne}

Remarque :

 Lors de l'écriture d'algorithme on utilise exclusivement le fichier logique.
II - LES ORGANISATIONS ET ACCES
Les fichiers offrent trois organisations distinctes et un ou les accès associés.


Organisation Séquentielle Relative Séquentielle  
Accès Indexée  
Séquentiel OUI OUI OUI  
Direct NON OUI OUI  
   
Clé pas de clé Indice externe à Index inclus dans  
  l'enregistrement l'enregistrement

1-L'organisation séquentielle
C'est une organisation simple qui consiste à ranger sur le support de sauvegarde les enregistrements les uns derrière les autres dans l'ordre de leur saisie.
L'accès à un enregistrement de rang n ne peut se faire que par le parcours des n-1 précédents.
L'adjonction d'enregistrement se fera toujours par la fin.
On peut associer ce type de structure au type abstrait de liste.
2-L'organisation relative
A chaque enregistrement stocké sur le support de sauvegarde sera associé un numéro d'ordre. On va pouvoir accéder aux enregistrements par ce numéro (accès direct ou accès calculé), soit par un parcours séquentiel classique.
On doit généralement connaître à la création du fichier la taille que celui-ci va prendre.
Il est possible d'ajouter un enregistrement à une position quelconque.
On peut associer ce type de structure au type abstrait de table.
3-L'organisation séquentielle indexée
Un enregistrement est référencé par une clé d'index; cette clé est gérée par le système, ce qui permet à l'utilisateur d'accéder directement à un enregistrement par l'intermédiaire de cette clé (accès direct ou accès indexé); ceci permet une organisation automatique des informations contenues dans le fichiers (exemple: tri alphabétique, ...).
On peut aussi parcourir le fichier séquentiellement dans l'ordre des clés.
Il est aussi possible pour un même fichier de définir des clés d'index de plusieurs niveaux, ce qui va permettre d'organiser encore plus finement les informations pour les utilisateurs.
On peut associer ce type de structure au type abstrait de table.
III - OPERATIONS SUR LES FICHIERS
1-Opérations logiques
Les opérations possibles sur un fichier sont :
Type : Créateur
         ? La création du fichier
Type : Destructeur
         ? La suppression du fichier
Type : Observateur
         ? La consultation du fichier
         ? La recherche d’enregistrements du fichier
Type : Modificateur
         ? La modification du fichier
                   ? La adjonction d’enregistrements
                   ? La modification d’enregistrements
                   ? La suppression d’enregistrements
2-Instructions algorithmiques
Procédures de gestion de fichiers

   Ouvrir (FICHIER, Mode, Accès)

Ouverture du fichier qui permet d'établir une communication entre le fichier physique (mémoire de masse) et le fichier logique (même centrale) en fonction
d’un mode de communication (création, lecture, écriture, alterné)
d'un accès au fichier (séquentiel s'il non indiqué).

   Fermer (FICHIER)

Fermeture du fichier qui met fin à la communication entre le fichier logique et le fichier physique.

   Lire (FICHIER,Enregistrement)

Lecture d'un enregistrement à partir du fichier physique pour être chargé en mémoire centrale.
En fonction du type de fichier on trouvera la syntaxe suivante :
lire (FICHIER,Enregistrement,indice,erreur) (relatif en accès direct)
lire (FICHIER,Enregistrement,index,erreur) (séquentiel indexé en accès direct)

   Ecrire (FICHIER, Enregistrement)

Ecriture d'un enregistrement de la mémoire centrale vers le fichier physique.
En fonction du type de fichier on trouvera la syntaxe suivante :
écrire (FICHIER,Enregistrement,indice,erreur) (relatif en l'accès direct)
écrire (FICHIER,Enregistrement,index,erreur) (séquentiel indexé en l'accès direct)

   (Ré)écrire (FICHIER, Enregistrement)

Ecriture d'un enregistrement qui vient d'être au préalable d'être lu (cas d'une modification).
D'un point de vue logique on devrait pouvoir se passer de cette instruction en utilisant l'instruction précédente écrire(F,E).

   Supprimer (FICHIER, Enregistrement)

Suppression d'un enregistrement dans le fichier physique servait exclusivement au fichier de type relatif et séquentiel indexé.
En fonction du type de fichier on trouvera la syntaxe suivante :
supprimer (FICHIER,Enregistrement,indice,erreur) (relatif en l'accès direct)
supprimer (FICHIER,Enregistrement,index,erreur) (séquentiel indexé en l'accès direct)

   Positionner (FICHIER, conditions)

Instruction exclusive d'un accès direct sur un fichier de type séquentiel indexé, qui va permettre de positionner le curseur d’accès au fichier en fonction d'une condition.

   positionner (FICHIER, clé conditions) (séquentiel indexé en l'accès direct)

Remarque : après un positionnement il faudra lire l'enregistrement correspondant pour le charger en mémoire centrale.

Fonction de gestion de fichiers

   FinFichier(FICHIER) résultat (booléen)

La fonction renvoie vrai lorsque le curseur de lecture a atteint la fin du fichier (sinon faux) lors d'un parcours séquentiel.
OUVERTURE ET ACCES AUX FICHIERS
Ouvrir (FICHIER, Mode, Accès)


Elément Définition Valeurs  
FICHIER Nom du fichier logique (indiquer dans le lexique)  
Mode Mode d'ouverture du fichier création (ou écriture)
lecture
écriture (ou adjonction)
lecture/écriture  
Accès Type d'accès (facultatif si l’ouverture est séquentielle) séquentiel (en standard)
direct


Mode d’ouverture Définition  
Création
            Ecriture Ouverture du fichier en création, si celui ci existe au préalable il sera réinitialisé (tous les enregistrements seront supprimés)  
Lecture Ouverture du fichier en lecture ; ce qui va permettre de transférer les enregistrements du fichier vers le programme par la procédure lire()  
Ecriture
          Adjonction Ouverture du fichier en écriture ; ce qui va permettre de transférer les enregistrements du programme vers le fichier par la procédure écrire()  
Lecture/Ecriture Ouverture du fichier en lecture/écriture
   ce qui va permettre de transférer les enregistrements du fichier vers le programme par la procédure lire()
   ce qui va permettre de transférer les enregistrements du programme vers le fichier par la procédure
écrire() ou réécrire()

Remarque :

On note une ambiguïté dans les modes d'ouverture en particulier avec le mode écriture.

Il convient donc lors de la rédaction d'algorithme de spécifier en remarque d'utilisation de syntaxe algorithmique la définition du mode d'ouverture.

Aucun commentaire:

Enregistrer un commentaire