Академический Документы
Профессиональный Документы
Культура Документы
Nous avons vu dans les chapitres prcdents comment construire des programmes et des modules qui utilisent
des objets de divers types. Nous avons aussi vu l'norme intrt de leur sauvegarde sur un support magntique
(disquettes, disques durs) mme s'ils sont inachevs ce qui nous vite de les rcrire chaque fois que nous les
utilisons et nous avons vu aussi comment crer notre propre bibliothque de modules et programmes mis au
point.
Eh bien ! le fait de les stocker sur un support magntique en donnant chacun d'eux un nom distinct,
nous avons cr des petits fichiers contenant les programmes et modules que nous avons labors.
Cependant cela n'a pas t le cas pour les donnes manipules par nos programmes et modules. Ds que
l'on "sort" de notre programme ou module ou que l'on teint notre ordinateur ces donnes sont perdues car elles
sont stockes dans la mmoire vive de l'ordinateur, alors que pour les garder il aurait fallu les mettre sur un
support magntique de stockage, autrement dit dans un fichier.
Les informations que l'on veut stocker peuvent prendre deux formes :
- des donnes sous forme de composants (ou articles)
- du texte.
C'est un ensemble de composants ou d'articles traitant du mme sujet et regroups sous un mme nom.
* La dclaration d'un fichier de donnes se fait en prcisant le mot FICHIER suivi du type des
composants. Ce dernier pouvant avoir n'importe quel type (lmentaire ou structur).
Exemple :
Type
T = TABLEAU [1..20] d'entiers
F = FICHIER de T (* fichier dont chaque composant contient un tableau de type T *)
correspondant = ENREGISTREMENT
Nom : chane [ 25 ]
Notel : entier
FIN
r = FICHIER de correspondant (* fichier dont chaque composant contient un correspondant *)
Variables
F1 : FICHIER d'entiers (* chaque composant contient un entier *)
Enr : F (* chaque composant contient un tableau *)
Repertoire : r (* chaque composant contient un correspondant *)
* Dclaration en PASCAL
Exemple
Variable Repertoire FILE OF article ;
C'est une suite de caractres du jeu ASCII dcoupe sous forme de lignes, pouvant tre de longueurs diffrentes.
(Chaque ligne de terminant par un "retour chariot" ventuellement suivi d'un changement de ligne).
CHERGOU B. 1 page :
ESI Cours : Algorithmique / Pascal
Exemple :
Variable Livre : TEXTE
* Dclaration en PASCAL
Exemple:
Une variable fichier interne doit tre relie un fichier externe. Cette liaison se fera grce une
procdure d'assignation.
Variable_fichier_interne : Fichier
Nom_de_fichier_externe : chane de caractres
Exemple
ASSIGN (repertoire , ' A : FIC1.DAT' )
FIC_EXT := 'a:FIC1.DAT' ;
ASSIGN ( repertoire , FIC_EXT) ;
Aprs l'tape d'assignation, un fichier doit tre ouvert. Deux cas sont possibles :
a) Le fichier n'existe pas, nous allons le crer. Il s'agit donc d'un nouveau fichier. Dans ce cas
l'ouverture se fait l'aide de la procdure :
REWRITE ( f )
ou f est le nom du fichier logique, par exemple : REWRITE (rpertoire)
CHERGOU B. 2 page :
ESI Cours : Algorithmique / Pascal
RESET ( f)
Lorsque le traitement d'un fichier est termin il ne faut pas oublier de le fermer grce la procdure :
CLOSE ( f )
Nous pouvons lire ou crire un composant d'un fichier l'aide les procdures que nous connaissons dj
et qui sont WRITE et WRITELN, et READ et READLN la seule diffrence que nous avons utilis jusqu'
prsent les noms de fichiers par dfaut ( cran pour l'criture et le clavier pour la lecture ). Donc pour lire ou
crire dans un fichier il suffit de prciser son nom.
ou f : fichier
exemple:
READ ( repertoire, article);
WRITELN (repertoire, article );
Dans les fichiers accs squentiel, les composants ou articles sont rangs les uns la suite des autres de telle
manire ce que si l'on veut accder un composant nous sommes obligs de lire tous ceux qui se trouvent avant.
Lors de la lecture dans un fichier accs squentiel aprs les tapes d'assignation et d'ouverture, le
pointeur se place automatiquement sur le premier composant (position 0) , et aussitt que vous faites une lecture
le pointeur se place automatiquement sur le composant suivant Mais, faites attention ! vrifiez si ce n'est pas la
fin du fichier, car tenter de lire au del de la fin du fichier provoque une erreur qu'il faudra viter.
NOTA : Le passage d'un objet de type fichier se fait TOUJOURS par variable ( VAR).
CHERGOU B. 3 page :
ESI Cours : Algorithmique / Pascal
1.6 EXEMPLES
Dans les exemples dtaills suivants, nous avons privilgi la partie programmation (les algorithmes
pouvant tre dduits aisment de cette dernire, car il ne contiennent aucune difficult particulire
Dans les exemples qui suivent, il est question de construire un rpertoire tlphonique, puis de le lister et enfin de
le consulter en squentiel puis en direct. Nous avons construit 4 modules :
1 ) cration du rpertoire
2 ) listage de son contenu
3 ) recherche d'un numro de tlphone partir du nom selon l'accs squentiel
4 ) recherche dun nom et du numro de tlphone dun correspondant partir de sa position du dans le
fichier selon l'accs direct.
CREATION DU REPERTOIRE
ANALYSE : On va crer pour la premire fois le fichier Rep et on enregistrera un un les composants.
PROGRAM PRINCIPAL;
uses crt;
(* -----PROGRAMME PRINCIPAL UTILISANT LA PROCEDURE CREAFILE -------- *)
type correspondant = RECORD
nom:string[25];
notel:longint;
END;
r =FILE OF correspondant;
var repertoire:r; (* Declaration du fichier repertoire *)
Chem :string[50]; (* chem va contenir le chemin d'acces du fichier *)
{$i E:\algo\modules\creafile.pro}
BEGIN
write('SVP ! donner le chemin d''acces de votre fichier: ');
readln(chem);
creafile(repertoire,chem);
END.
CHERGOU B. 5 page :
ESI Cours : Algorithmique / Pascal
until eof(rep); (* detection de la fin du fichier *)
close (rep); (* fermeture du fichier rep *)
END;
PROGRAM FICHIER2;
uses crt,printer;
(* ------------- PROGRAMME PRINCIPAL UTILISANT LA PROCEDURE LISTFILE ---------------------- *)
type composant = RECORD
nom:string[25];
notel:longint;
END;
r =FILE OF composant;
ch=string[25];
var repertoire:r; (* Declaration du fichier repertoire *)
{$i E:\algo\modules\listfile.pro}
BEGIN
writeln('ATTENTION : connectez votre imprimante puis appuyez sur ENTREE**');
readln;
write('SVP ! donner le chemin d''acces de votre fichier: ');
readln(chem);
listfile(repertoire,chem);
readln;
END.
RESULTATS
ANALYSE : On se dplace directement la position donne et on met le nom dans Nom et le numro de
tlphone dans Tele.
CHERGOU B. 7 page :
ESI Cours : Algorithmique / Pascal
PROCEDURE consrepd(var rep:r;chemin:string;position:integer;Var nom:ch;var tele:longint);
(* ---- PROCEDURE DE CONSULTATION EN ACCES DIRECT DU FICHIER REPERT
on donne la position du correspondant et elle retourne le nom et
un numero de telephone ou zero dans le cas ou le nom n'existe pas -- *)
var article:composant;
BEGIN
assign(rep,chemin); (* assignation entre rep et f1.dat *)
reset(rep); (* ouverture de rep *)
seek(rep,position-1);
read(rep,article);
nom := article.nom;
tele := article.notel;
close (rep); (* fermeture de rep *)
END;
PROGRAM principal;
uses wincrt;
(* ----- PROGRAMME PRINCIPAL UTILISANT LA PROCEDURE CONSREPD ---- *)
type composant = RECORD
nom:string[25];
notel:longint;
END;
r =FILE OF composant;
ch=string[25];
var repertoire:r; (* Declaration du fichier repertoire *)
nomcorr:ch;
pos,telephone:longint;
chem:string;
{$i E:\algo\modules\consrepd.pro}
BEGIN
write('SVP ! donner le chemin d''acces de votre fichier: ');
readln(chem);
writeln('**** CONSULTATION EN ACCES DIRECT DU FICHIER REPERT ********');
write( 'Donnez la position du correspondant : ');
readln(pos);
consrepd(repertoire,chem,pos,nomcorr,telephone);
writeln('Le nom de votre correspondant est : ',nomcorr , ' et son telephone : ', telephone);
readln;
END.
readln;
END.
CHERGOU B. 8 page :