You are on page 1of 7

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

Chap 8: Les fichiers squentiels


I. Gnralits sur les fichiers
Toutes les informations que nous avons jusqu' prsent traites taient saisies partir du clavier et stockes en mmoire (la RAM). Or la mmoire centrale est volatile : les informations qui y sont stockes sont dtruites la fin de l'excution du programme et ne peuvent donc pas tre rutilises ultrieurement. A la fin de l'excution du programme, il ne reste aucune trace de cette excution et des rsultats gnrs. Par ailleurs, la mmoire centrale a l'inconvnient d'tre bien plus chre que la mmoire non volatile des disques durs, disquettes ou bandes magntiques. La taille de la mmoire centrale est par consquent trs infrieure la taille de la mmoire non volatile. Pour mmoriser de gros volumes d'information, la mmoire centrale ne suffit pas. Ainsi, dans la plupart des applications d'entreprises pour lesquelles un gros volume d'informations doit tre mmoris plus longtemps que la dure de vie du programme, les informations sont rcupres et mmorises sur un support non volatile (disques, disquettes, bandes magntiques). Les informations y sont enregistres de manire permanente dans des fichiers. Les informations ne sont plus seulement communiques via le clavier et l'cran, m ais aussi via des fichiers de support non volatiles. Il est alors possible qu'un programme ne communique avec son environnement qu'au travers des fichiers et n'utilise ni la saisie, ni l'affichage. cran mmoire centrale

support non volatile

fichiers

7
clavier

Un fichier est un regroupement d'informations sur un support non volatile tel que le disque
Il existe de nombreux types de fichiers, qui diffrent en outre selon les langages. Nous distinguerons les fichiers de type texte et les fichiers structurs. - Les fichiers structurs permettent denregistrer des donnes de mme nature. Ils sont composs denregistrements (ou articles) contenant les mmes champs (ou rubrique). Gnralement, chaque enregistrement correspond une ligne, et les rubriques sont spares par un sparateur qui peut tre par exemple un point-virgule (format csv). - Les fichiers non structurs permettent quant eux dentasser des informations de natures diverses. Ils ne sont pas obligatoirement structurs en enregistrements, mais ils ne peuvent tre lus que de manire squentielle. Ex : un fichier word.
1

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

Il existe deux grandes familles de supports pour les fichiers: - les supports adressables , sont capables de fournir l'adresse d'un emplacement de stockage. C'est le cas des disques et les disquettes. Ils permettent un accs direct (non squentiel) leur contenu. - les supports non adressables qui ne peuvent tre accds que de manire squentielle. C'est le cas des bandes magntiques, qui sont encore utilises pour stocker les donnes trs volumineuses (les archives) car elles sont peu chres. On appelle mode d'accs un fichier la faon de retrouver une donne dans ce fichier. Il existe deux modes d'accs principaux: - l'accs squentiel: possible sur tous les types de support et avec tous les types de fichiers Pour accder un article particulier, on doit avoir parcouru tous les articles prcdents sur le support. - l'accs direct: possible seulement sur support adressable avec des fichiers structurs On peut se positionner directement sur l'enregistrement voulu partir de son emplacement sur le support (ou partir dune cl). Un fichier accs direct peut tre vu en quelque sorte comme un norme tableau stock sur support non volatile.

II. Les fichiers accs squentiel


Un fichier squentiel est un fichier dont les donnes ne sont accessibles que de manire conscutive sur le support. Leur accs est donc squentiel. Contrairement aux lments d'un tableau ou aux champs d'un enregistrement, les donnes d'un fichier squentiel ne sont pas accessible s directement, ni par un indice, ni par un nom. Pour accder un enregistrement particulier, il faut parcourir le fichier squentiel depuis le dbut jusqu' trouver l'enregistrement recherch. On peut se reprsenter un fichier squentiel comme une bande de papier contenant des articles cotes cotes. Cette bande dfile sous une tte de lecture qui ne peut lire qu un seul article la fois. Pour accder un article, on est oblig de positionner la tte de lecture sur cet article , en faisant dfiler la bande en dessous.

Benth Djaneh

sens du dfilement

Tte de lecture

A. Dclaration
Dans un programme, un fichier est dsign par une variable, qu'on dclare dans la section des variable s 1 . Pour dclarer un fichier squentiel structur, il faut indiquer le type des articles (enregistrements) qui composent ce fichier. Le plus souvent les articles sont de type enregistrement, dclar au pralable. Var: nom_fichier : fichier squentiel de type_articles
1

C'est une variable particulire qui ne reprsente pas un espace de la mmoire mais qui reprsente un espace dans un priphrique de stockage.
2

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

ex: Type temploy = enregistrement nom: chaine prnom: chaine fonction: chaine salaire: entier finenreg Var personnel: fichier squentiel de temploy Remarque : Les fichiers texte sont aussi des fichiers accs squentiel. On ne dclare pas de type pour leurs donnes, car par dfinition les donnes dun fichier texte peuvent tre de nature diffrente. Nous ntudierons pas ce type de fichier en algo.

B. Ouverture et fermeture
Comme un fichier ne se trouve pas en mmoire centrale (mais en priphrique), il n'est pas accessible directement par le programme (seule la mmoire centrale est accessible directement). Il est ncessaire de l'ouvrir avant de pouvoir l'utiliser2 . L'ouverture permet la rservation d'une mmoire tampon en mmoire centrale pour les changes entre le disque et la mmoire centrale 3 . Il existe 4 modes principaux d'ouverture d'un fichier: - en lecture pour rcuprer des donnes du fichier dans des variables de la mmoire centrale - en criture pour crer un ficher dans lequel enregistrer des rsultats. Si fichier existe dj, son ancien contenu est dtruit - en mode ajout pour pouvoir ajouter des articles la fin d'un fichier dj existant (dans un fichier squentiel, il est impossible d'ajouter un article ailleurs qu' la fin) Ouvrir nom_fichier en mode_ouverture ex: Ouvrir personnel en lecture Aprs utilisation, un fichier doit tre ferm, de faon librer la mmoire tampon alloue lors de l'ouverture et ainsi enregistrer les dernires donnes du tampon non encore transfres. Fermer nom_fichier Remarque : Dans les fichiers accs direct, il existe un autre mode douverture : le mode mise jour. Il permet de modifier un article existant, ou mme dajouter un nouvel article au milieu du fichier. Ces oprations sont impossibles directement avec les fichiers organisation squentielle.

C. Lecture et Ecriture
La communication entre la mmoire centrale et le fichier peut se faire dans les deux sens: de la mmoire au fichier : c'est l'criture ou du fichier vers la mmoire : c'est la lecture
2

L'ouverture permet d'effectuer la liaison entre le fichier logique (la variable du programme) et le fichier physique manipul par le systme d'exploitation. En programmation, notamment en C++, c'est l'ouverture qu'on indique quel fichier physique correspond le fichier logique. 3 Les transferts d'articles entre le support et la mmoire s'effectuent par blocs. Un bloc est l'ensemble des octets transfrs par le systme d'exploitation lors d'une opration d'entre-sortie.
3

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

En algorithmique, toute opration de communication (criture ou lecture) s'effectue sur un article entier, et se fait par l'intermdiaire dune variable enregistrement en mmoire centrale (le plus souvent un enregistrement). ECRITURE: ENREGISTREMENT EN RAM LECTURE: ARTICLE DU FICHIER copie ENREGISTREMENT EN RAM copie ARTICLE DU FICHIER

" Application: Supposons que le clavier et l'cran soient comme des fichiers. A quoi correspondent les instructions Saisir et Afficher: lecture ou criture? - SAISIR ~ Lecture - AFFICHER ~ Ecriture LIRE L'instruction Lire permet de transfrer des articles d'un fichier existant dans une (ou plusieurs) variable du programme. La variable lue doit obligatoirement tre de mme structure (c'est--dire du mme type) que les articles du fichier. Le fichier lu doit obligatoirement exister. Si un seul fichier est ouvert, on peut omettre d'indiquer le nom du fichier sur lequel on lit. En revanche, si plusieurs fichiers sont ouverts simultanment, il faut obligatoirement prciser sur quel fichier on lit Lire (nom_fichier, nom_variable ) Ou Lire nom_variable sil ny a quun seul fichier ouvert *la variable est du mme type que les articles ex: Recopier dans la variable ouvrier les informations contenues dans l'article suivant /* ouvrier est un enregistrement de type temploy*/ Lire (Personnel, ouvrier) Si on essaye de lire aprs la fin du fichier, il va y avoir une erreur d'excution. Pour viter cela, il existe une fonction boolenne appele EOF( ) (pour end of file) qui renvoie vrai lorsque la tte de lecture est en face une marque de fin de fichier. Eof ( ) devient Vrai lorsqu'on lit aprs le dernier article. Si plusieurs fichiers sont ouverts, on passe en paramtre le nom du fichier pour lequel on veut tester la fin. Donc avant toute opration de lecture, il faut s'assurer que la fin du fichier n'est pas atteinte. ex: Si non eof( ) Tantque non eof() Alors Lire (Personnel, ouvrier) /*traitement sur l'article*/ Sinon Afficher "Fin de fichier atteinte" Lire FinSi FinTantque ECRIRE L'instruction Ecrire permet de recopier le contenu d'une variable (contenue en mmoire centrale) la fin du fichier (au premier article vide). Ecrire permet donc soit de crer un nouveau fichier (en mode criture), soit d'agrandir un fichier en lui ajoutant un article la fin (en mode ajout).

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

L'criture se fait article par article. Donc la variable crite dans le fichier doit obligatoirement tre du type des articles. Ecrire (nom_fichier , nom_variable ) *la variable est du type des articles Ou Ecrire nom_variable sil ny a quun seul fichier ouvert ex: Var empl: temploye Dbut empl.nom "Dupont" empl.prenom "Jean" Ecrire (Personnel, empl)

D. Mise jour dun fichier squentiel


Dans un fichier squentiel, il est impossible de modifier directement un article, encore moins dajouter un nouvel article ailleurs qu la fin, et non plus de supprimer physiquement un article. Ces oprations de mise jour ne peuvent se faire quen rcrivant compltement le fichier. La mise jour directe nest possible quavec les fichiers accs direct. Pour les fichiers de petite taille, voil comment procder : - Copier tout son contenu en mmoire centrale, par exemple dans un tableau denregistrement. Cest le chargement. - Faire les mises jour dsires sur les donnes ainsi charges en mmoire centrale - Recopier ces donnes mises jour dans le fichier initial (en crasant ainsi les anciennes donnes). Cest la sauvegarde . Pour mettre jour des fichiers plus volumineux qui ne peuvent tre intgrale ment chargs en mmoire centrale, on passe par lintermdiaire dun autre fichier.

III. Exemple complet


Programme comptes_clients Type tcompte = enregistrement num: entier etat: caractre /*N pour normal, I pour impay, C pour contentieux*/ solde: rel finenreg Var compte: tcompte cpteclt : fichier squentiel de tcompte rep: caractre n, i : entier tabcompte : tableau[1..100] de tcompte //tableau denregistrement pour le chargement en mmoire Dbut /* cration et remplissage du fichier */
5

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

Ouvrir cpteclt en criture // on saisit les informations sur les clients et on les crit dans le fichier Rpter // on saisit les champs de l'enregistrement Afficher "Numro?" Saisir compte.num Afficher "etat?" Saisir compte.etat Afficher "solde?" Saisir compte.solde Afficher "Autre compte? (O/N)" Saisir rep // on recopie l'enregistrement dans le premier article vide du fichier Ecrire (cpteclt, compte) Jusqu' rep "O" Fermer cpteclt

/* lecture des articles du fichier */ Ouvrir cpteclt en le cture // On lit les articles et les affiche tant qu'on a pas atteint la fin du fichier Tantque non eof( ) Faire * // rcuprer l'article courant dans l'enregistrement en mmoire centrale Lire (cpteclt,compte) // afficher les champ de l'enregistrement Afficher "Numro: ", compte.num Afficher "Solde: ", compte.solde Afficher "Etat:" Selon compte.etat Faire "N": Afficher "Normal" "I": Afficher "Impay" "C": Afficher "Contentieux" FinSelon FinTantque Fermer cpteclt /* ajout d'un compte client la fin du fichier */ Ouvrir cpteclt en mode ajout // on saisit un enregistrement correspondant l'article ajouter Afficher "Numro?" Saisir compte.num Afficher "etat?" Saisir compte.etat Afficher "solde?" Saisir compte.solde Afficher "Autre compte? (O/N)" Saisir rep // on recopie l'enregistrement sur le fichier Ecrire (cpteclt, compte) /*modification d'un compte client, le 5689*/
6

Laporte S.

Les fichiers squentiels

DAIGL BTS 1 IG

// Chargement en mmoire centrale, dans le tableau denregistrements tabcompte et modification Ouvrir cpteclt en lecture n0 Tantque non eof( ) Faire n n + 1 Lire (cpteclt, tabcompte[n]) Si tabcompte[n].num = 5689 Alors tabcompte[n].solde tabcompte[n].solde 500 FinSi FinTantque // Sauvegarde du tableau dans le fichier Ouvrir cpteclt en ecriture // n contient le nombre denregistrements Pour i de 1 jusqu n Faire Ecrire (cpteclt, tabcompte[i]) FinPour /*Suppression d'un compte, le 1268*/ //chargement Ouvrir cpteclt en lecture n0 Tantque non eof( ) Faire n n+1 Lire (cpteclt, tabcompte[n]) FinTantque //sauvegarde (sauf le compte 1268) Ouvrir cpteclt en ecriture Pour i de 1 jusqu n Faire Si tabcompte[i].num ? 1268 Ecrire (cpteclt, tabcompte[i]) FinSi FinPour /* stockage dans un fichier spar du numro de tous les clients en contentieux.*/ // ajouter dans la partie dclaration des variables: // cltcont : fichier squentiel d'entiers // fichier contenant des numros de clients Ouvrir cpteclt en lecture Ouvrir cltcont en criture Tantque non eof ( cpteclt ) Faire Lire (cpteclt, compte) Si compte.etat = "C" Alors Ecrire (cltcont, compte.num) Finsi FinTantque Fermer cpteclt, cltcont Fin

You might also like