Vous êtes sur la page 1sur 13

me

Chap1 : Les enregistrements et les fichiers Classe : 4 SI

LES ENREGISTREMENTS ET LES FICHIERS


A Les enregistrements
I- Introduction

1. Activit

On veut crire un programme permettant de :


Saisir les informations de vente de deux produits
Dterminer le produit le plus bnfique

Quantit Prix de vente Prix de vente


Rfrence Dsignation
vendue unitaire total
Cf145

2. Questions:

1. Quelle est la structure de donne ncessaire ?


Plusieurs tableaux

Rfrence

Dsignation

.
.
.
2. Est-il possible dutiliser une mme structure pour toutes les informations dun produit ?
Si on veut tablir une seule structure de donnes qui comporte la fois les donnes
numriques (quantit, prix unitaire, prix total) et les donnes alphanumriques
(Rfrence, dsignation) nous devons crer un nouveau type qui permet de les regrouper
Les Enregistrements ou articles (Record en Pascal)

II- Dfinition et dclaration

1. Dfinition :

Un enregistrement est un type de donnes dfini par lutilisateur et qui permet de rassembler
un ensemble des lments (ou champs) de type diffrents

Champ1 Champ2 Champ3 Champ4 Champ5


Type1 Type2 Type3 Type4 Type5
Un enregistrement

Prix de vente Prix de vente


Rfrence Dsignation Quantit
unitaire total
Chane Chane Entier
rel rel
Un enregistrement produit

Profs: MSEKNI Dalila & SFAR Hayet page-1/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI
2. Dclaration :

Mthode 1 :
En algorithmique En Pascal
T. D. N.T TYPE
Type Nom_type = Record
Nom_type = Enregistrement Champ1 : type 1 ;
Champ1 : type 1
Champ n : type n ;
Champ n : type n End ;
Fin nom_type VAR
T. D. O Nom_objet : nom_type ;
Objet Type/ Rle
Nature
Un enregistrement
Nom_objet Nom_type
pour ...

Mthode 2 :
En algorithmique En Pascal
T. D. N.T TYPE
Type Reference = Record
Reference = Enregistrement Part1: A..Z ;
Part1 : "A".."Z" Part2: integer ;
Part2 : entier End ;
Fin Reference Informations = Record
Informations = Enregistrement Ref : reference ;
Ref : reference Design : string ;
Design : chane Qte : integer ;
Qte : Entier PVU, PVT: Real ;
PVU, PVT: Rel End ;
Fin Informations VAR
T. D. O Produit : Informations ;
Objet Type/ Rle
Nature
Enregistrement pour
Produit Informations
une fiche produit

Dclaration de type informations et de lobjet Produit

Mthode 1 :
En algorithmique En Pascal
T. D. N.T TYPE
Type Informations = Record
Informations = Enregistrement Ref, Design : string ;
Ref, Design : chane Qte : integer ;
Qte : Entier PVU, PVT: Real ;
PVU, PVT: Rel End;
Fin Informations VAR
Produit : Informations ;
T. D. O
Objet Type/ Rle
Nature
Enregistrement pour
Produit Informations
une fiche produit

Profs: MSEKNI Dalila & SFAR Hayet page-2/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Mthode 2 :
En algorithmique En Pascal
T. D. N.T TYPE
Type
Informations = Enregistrement Informations = Record
Ref : Enregistrement Ref : Record
Part1 : "A".."Z" Part1: A..Z ;
Part2 : entier Part2: integer ;
Fin ref End ;
Design : chane Design : string ;
Qte : Entier Qte : integer ;
PVU, PVT: Rel PVU, PVT: Real ;
Fin Informations End ;

T. D. O VAR
Objet Type/ Rle Produit : Informations ;
Nature
Enregistrement pour
Produit Informations
une fiche produit

Remarques

Les types des champs peuvent tre prdfinis ou dfinis par lutilisateur
Un champ a exactement les mmes proprits quune variable de mme type
Le champ dune variable enregistrement peut tre lui mme un enregistrement

Exemple : dclarer le champ ref comme un enregistrement form de 2 champs (part1 : Lettre
majuscule, part2 : entier)

III- Utilisation des enregistrements

1. Affectation :

En algorithmique En Pascal Remarque : Il est possible daffecter une


variable enregistrement dans une autre
condition quils soient de mme structure :
(e1 e2) ou (e2 e1)
Objet.champ valeur Objet.champ := valeur ;
Tous les champs de la variable enregistrement
affecter seront recopies dans les champs de
lautre.

2. Lecture :

En analyse En algorithme En Pascal


Objet.champ = donne Lire (objet.champ) Readln (Objet.champ) ;

3. Ecriture :

En analyse & algorithme En Pascal


Ecrire (objet.champ) Writeln (Objet.champ) ;

Profs: MSEKNI Dalila & SFAR Hayet page-3/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Solution algorithmique de lactivite1:

Pascal function test (prod1, prod2 : informations) : string;


program produits; begin
uses wincrt; prod1.pvt := prod1.qte* prod1.pvu;
type Informations = record prod2.pvt := prod2.qte*prod2.pvu;
ref, design : string; if prod1.pvt > prod2.pvt then test := 'produit 1 '
qte : integer; else
pvu, pvt : real; if prod1.pvt < prod2.pvt then test := 'produit 2 '
end; else test := 'egalit';
var prod1 , prod2 : informations; end;

procedure saisie ( var prod : informations); begin {PP}


writeln ('introduire les informations du produit 1');
begin saisie (prod1);
write ('reference = '); readln (prod.ref); writeln ('introduire les informations du produit 2');
write ('designation = '); realdln(prod.design); saisie (prod2);
write ('Qte vendue = '); readln (prod.qte); writeln (test(prod1, prod2));
write ('prix de vente unitaire ='); end.
readln (prod.pvu);
end;

4. La structure avecfaire :

Pour simplifier lcriture et viter lutilisation rpte de la notion objet.champ, nous


pouvons utiliser linstruction Avec.. Faire

En algorithmique En Pascal
With Variable Do
Avec variable Faire Begin
Action champ 1 Action champ1 ;
Action champ 2 Action champ2;

Fin Avec end;

Solution Avec.. Faire

En algorithmique En Pascal
0. Dbut procedure saisie procedure saisie(var prod : informations);
(var prod : informations)
begin
1. Avec Prod Faire with prod do
Ecrire ("rfrence = "), Lire (ref) begin
Ecrire ("dsignation = "), Lire (design) write('reference = '); readln(ref);
Ecrire ("quantit vendue = "), Lire (Qte) write('designation = '); readln(design);
Ecrire ("prix de vente unitaire= ") write ('Qte vendue = '); readln(Qte);
Lire (pvu) write ('prix de vente unitaire = ');
Fin Avec readln (pvu);
2. Fin saisie end;
end;

Profs: MSEKNI Dalila & SFAR Hayet page-4/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

5. Vecteur denregistrements :

Activit : Reprenons lactivit1 pour n produits (avec 10 < n < 50)

Questions : Que peut tre la structure de donne ncessaire tableau denregistrements

Dclaration

En algorithmique En Pascal
T. D. N.T TYPE
Type Informations = Record
Informations = Enregistrement Ref, Design : string ;
Ref, Design : chane Qte : integer ;
Qte : Entier PVU, PVT: Real ;
PVU, PVT: Rel End ;
Fin Informations
Vect_info = tableau [1..50] dinformations Vect_info = array[1..50] of informations;
T. D. O
Objet Type/ Rle VAR
Nature Tab : Vect_info ;
Tableau de 50
Tab Vect_info enregistrements pour
des fiches produits

B- Les fichiers :
I- Introduction :

Avec les structures prcdemment utilises, les donnes dun programme seront perdues ds
larrt de lexcution de ce programme. Dans certains cas la sauvegarde des donnes est
ncessaire do on fait recours une nouvelle structure les fichiers

Un fichier est un ensemble structur des donnes de mme type (rel, entier, caractre,
chane, enregistrement ) enregistres sur une mmoire auxiliaire.

II- Organisation des fichiers

Lorganisation dun fichier dsigne le mode dimplmentation des informations et des


enregistrements dans ce fichier et fournit les proprits daccs.
1. Organisation squentielle : laccs aux informations se fait en parcourant les
enregistrements les uns aprs les autres
2. Organisation relative (dite aussi directe) : les enregistrements sont identifis par un numro
dordre

III- Types daccs

En informatique, nous distinguons deux types daccs aux donnes dun fichier :
Accs squentiel : pour accder linformation dordre n, on doit passer par les (n-1)
informations prcdentes
Accs direct : On accde directement linformation dsire, en prcisant le numro
demplacement (le numro dordre) de cette information.

Profs: MSEKNI Dalila & SFAR Hayet page-5/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Remarque : Tout fichier peut tre utilis avec lun des deux types daccs. Donc le choix de type
daccs dans un fichier ne concerne pas le fichier lui-mme mais concerne la manire dont il va tre
trait par la machine (le choix de type daccs se fait seulement dans le programme).

IV- Les Fichiers accs squentiel

1. Prsentation

Un fichier est dit accs squentiel (ou fichier squentiel) si laccs son n ime information
ncessite le passage par les (n-1) informations prcdentes.

2. Dclaration

En algorithmique En Pascal
T. D. N.T TYPE
Type Nom_fichier = File of type_composants ;
Nom_fichier = Fichier de type_composants
VAR
T. D. O Nom_logique : nom_fichier ;
Objet Type/ Nature Rle
Nom_logique Nom_fichier Fichier pour

Remarques

1. Comme on a dj dit un fichier doit tre enregistr sur un support externe, donc ce fichier doit
avoir un nom et de prfrence une extension. Ce nom est appel le nom externe (ou le nom
physique)

2. Le nom de lobjet dclar dans le tableau des objets comme nom de fichier est le nom interne
du fichier (ou aussi le nom logique). Cest le nom utilis dans les instructions du programme.

3. Les fichiers de donnes (data) ont une extension .dat, .fch

Activit :

On veut crire un programme permettant de saisir et enregistrer les informations de plusieurs


produits prsents dans lactivit 1 des enregistrements.
Prsenter la dclaration en algorithme et en pascal de la structure de donnes ncessaire.

En algorithmique En Pascal
T. D. N.T TYPE
Type Informations = Record
Informations = Enregistrement Ref, Design : string ;
Ref, Design : chane Qte : integer ;
Qte : Entier PVU, PVT: Real ;
PVU, PVT: Rel End ;
Fin Informations Liste_prod = File of informations;
Liste_prod = Fichier de informations VAR
T. D. O Fiches_prod : Liste_prod ;
Objet Type Rle
fichier pour des
Fiches_prod Liste_prod
fiches produits
Profs: MSEKNI Dalila & SFAR Hayet page-6/13-
me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

3. Traitement sur les fichiers

Les fonctions et les procdures sur les fichiers :

Description Syntaxe algorithmique Syntaxe en Pascal


Avant dutiliser un fichier il
faut associer (Relier) son Associer (nom logique, nom physique)
nom logique son nom Ou bien Assign (nom logique, nom physique)
physique Assigner (nom logique, nom physique)

Si le fichier existe :
Ouvrir le fichier et effacer
son contenu.
Recrer (nom_logique) ReWrite (nom_logique) ;
Si le fichier nexiste pas :
Crer le fichier.

Ouvrir un fichier existant et


repositionner ou remettre
Ouvrir (nom_logique) ReSet (nom_logique) ;
son pointeur 0.

Ecrire ou modifier une


valeur ou un enregistrement
Ecrire (nom_logique, variable) Write (nom_logique, variable);
dans un fichier.

Lire une valeur ou un


Read (nom_logique, variable)
enregistrement partir d'un
Lire (nom_logique, variable)
fichier. Remarque : read <> readln

Fermer un fichier.
Fermer (nom_logique) Close (nom_logique) ;

Fonction boolenne
vrifiant si la fin du fichier a
Fin_Fichier (nom logique) EOF (nom logique)
t atteinte.

Remarque :
Les oprations de manipulation des fichiers sont sujettes des nombreuses erreurs
indpendantes du programme.

Tentative d'ouverture d'un fichier qui n'existe pas avec une des commandes suivantes :
Reset (ouvrir un fichier)
Append (ouvrir un fichier texte en mode ajout)
Rename (renommer un fichier)
Erase (supprimer un fichier)

Pour viter cette erreur dexcution :


o commencer par dsactiver la dtection automatique des erreurs par {$I-}
o ractiver la dtection automatique des erreurs par {$I+} aprs la commande
utilise
o faire recours la fonction IORESULT qui retourne une valeur <> 0 si le fichier
n'existe pas

Profs: MSEKNI Dalila & SFAR Hayet page-7/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Exemple :

En Algorithme En Pascal
Ecrire ("Entrer le nom du fichier : "), Write ('Entrer le nom du fichier : ');
lire (nom) Readln (nom) ;
Associer fich_caractere,"c:\"+nom+".dat") Assign (fich_caractere,'c:\'+nom+'.dat');
{$I-} {On dsactive les erreurs dE/S} {$I-}
Ouvrir (fich_caractere) ReSet (fich_caractere) ;
{$I+} {On ractive les erreurs} {$I+}
Si ioresult <> 0 alors If ioresult <> 0 Then
Recrer (Fich_caractere) Begin
Saisie(Fich_caractere) ReWrite (Fich_caractere) ;
Fin si Saisie(Fich_caractere) ;
End ;

On ouvre le fichier fich_caractere avec la commande Ouvrir, si le fichier nexiste pas


lordinateur va dtecter lerreur sans se bloquer. La commande ioresult va contenir une
valeur<>0, donc il faut dans ce cas crer le fichier avec la commande Recrer.

Exercice : Ecrire un programme qui permet de remplir un fichier avec n caractres (n>0) et de
dterminer la deuxime voyelle si elle existe.

En Algorithme En Pascal
0. Dbut voyelle BEGIN {PP}
1. Ecrire (''Entrer un nom de fichier :'') writeln ('Entrer un nom de fichier :') ;
lire (nom) readln (nom) ;
2. Associer (caractere, nom) Assign (caractere, nom) ;
3. {$I-} {$I-}
Ouvrir (caractere) ReSet (caractere) ;
{$I+} {$I+}
Si ioresult <>0 alors If ioresult <>0 Then
Dbut Begin
Recrer (caractere) Rewrite (caractere) ;
Proc saisie (caractere) Saisie (caractere) ;
Fin End ;
4. Proc recherche (caractere) Recherche (caractere) ;
5. Fermer (caractere) Close (caractere) ;
6. Fin voyelle End.

Profs: MSEKNI Dalila & SFAR Hayet page-8/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

V- Les Fichiers accs direct :

1. Prsentation

Un fichier est dit accs direct si on peut accder directement chacun de ses lments.

2. Les fonctions et les procdures prdfinies sur les fichiers

Les Fonctions et procdures daccs direct sur les fichiers :

Rle Syntaxe en Algorithme Syntaxe en Pascal


Accder un lment d'un
Pointer (nom logique, numro) Seek (nom logique, numro)
fichier accs direct.
Retourner la taille d'un fichier
Taille_fichier (nom logique) Filesize (nom logique)
accs direct.
Supprimer un fichier. Effacer (nom logique) Erase (nom logique)
Renommer (ancien nom logique, Rename (ancien nom logique,
Changer le nom d'un fichier. nouveau nom) nouveau nom)
Tronquer le fichier, la position
Tronquer (nom logique) Truncate (nom logique)
courante du pointeur de fichier.

Exercice :

Ecrire un programme en pascal permettant de :


crer un fichier des lves. Chaque lve est caractrise par :
- nom
- note de contrle 1
- note de contrle 2
- note de synthse
- moyenne

ouvrir le fichier lve et constituer deux autres fichiers : le premier contiendra la liste des
donnes correspondante aux lves ayant une moyenne suprieure ou gale a 10 et le
deuxime contiendra les donnes correspondante aux autres lves.
Dterminer et afficher le nombre des lves qui ont une moyenne >= 10, leurs noms et leurs
moyennes
Dterminer et afficher le nombre des lves qui ont une moyenne < 10, leurs noms et leurs
moyennes
Dterminer et afficher le numro, le nom et la moyenne des lves qui ont la moyenne la plus
leves.

Profs: MSEKNI Dalila & SFAR Hayet page-9/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

program enlacement; procedure eclat (var f, f1, f2: feleve);


uses wincrt; var p1, p2: integer;
type begin
eleve = record reset (f); rewrite (f1); rewrite (f2);
nom : string; p1:=0 ; p2:=0;
n1,n2,ns,moy : real; while not(eof(f)) do
end; begin
feleve =file of eleve; read (f, x);
var if x.moy>=10 then
f,f1,f2: feleve; x : eleve; nom1,nom2: string; begin
seek(f1,p1);
procedure saisie (var f : feleve ) ; write(f1,x);
var i, n : integer ; rep: char; p1:=p1+1;
begin end
repeat else
with x do begin
begin seek(f2,p2);
write (' Entrer le nom de l''eleve :'); readln (nom); write(f2,x);
write (' Entrer la note de devoir de controle n1 :'); p2:=p2+1;
readln (n1); end;
write (' Entrer la note de devoir de controle n2:'); end;
readln (n2); end;
write (' Entrer la note de devoir de synthse :');
readln (ns); procedure maximum(var f:feleve);
writeln; var p : integer; max : real;
moy:= (n1+n2+ns*2)/4; begin
write(f, x); reset(f); read (f, x); max := x.moy;
end; while not(eof(f)) do
repeat begin
write (' voulez vous ajouter un autre lve : '); read (f, x);
readln (rep); if max < x.moy then
until (upcase (rep) in ['O','N']); max := x.moy;
until upcase (rep)='N'; end;
close (f); reset (f);
end; while not(eof(f)) do
begin
procedure creation ( var f : feleve ); read (f, x);
var nom : string; if max = x.moy then
begin begin
write('introduire le nom : '); readln (nom); writeln;
assign (f, 'c:\'+nom+'.dat'); writeln (' l''eleve numro : ', filepos (f),' de nom : ', x.nom,
{$I-} ' a une moyenne = ', x.moy:5:2);
reset(f); end;
{$I+} end;
if ioresult <> 0 then end;
begin
rewrite(f); begin
saisie(f); creation(f);
end; write ('introduire le nom du premier fichier : ');
end; readln (nom1);
assign (f1,'c:\'+nom1+'.dat');
procedure affiche (var ft : feleve ; v : string); write ('introduire le nom du deuxime fichier : ');
begin readln (nom2);
reset (ft); assign (f2,'c:\'+nom2+'.dat');
writeln ('le nombre des lves qui ont une moyenne ', v, ' 10 eclat (f,f1,f2); writeln;
est ', filesize (ft)); affiche (f1,' >= '); writeln;
affiche (f2,' < ');
while not (eof (ft)) do maximum(f);
begin close(f);
read (ft, x); close(f1);
writeln (' l''eleve ', x.nom, ' a une moyenne = ', x.moy:5:2); close(f2);
end; end.
end;

Profs: MSEKNI Dalila & SFAR Hayet page-10/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

VII- Les fichiers texte :


1. Prsentation

Un fichier texte(ou ASCII) est un fichier contenant des caractres.

2. Dclaration

En algorithmique En Pascal

T. D. O VAR
Objet Type/ Nature Rle Nom_logique : text ;
Nom_logique Texte Fichier texte pour

Activit1 :
On veut crire un programme permettant de saisir et enregistrer la liste des enseignants du
lyce TAHAR SFAR Mahdia

En algorithmique En Pascal
T. D. O
Objet Type/ Nature Rle VAR
enseignants Texte Fichier texte pour la saisie Enseignants : text ;
de la liste des enseignants

Remarque :
Les fichiers texte contiennent des caractres de type "Retour chariot" (CR) ou "Fin de ligne"
(Eoln) et "Fin de texte" (code CTRL-Z)

3. Procdures et fonctions prdfinies

Rle Syntaxe en Algorithme Syntaxe en Pascal


Fonction boolenne testant la fin dune
Fin_ligne (nom logique) Eoln (nom logique)
ligne dans un fichier texte.
Fonction identique Fin_ligne (Eoln)
mais supprimant les espaces et les
Chercher_Fin_ligne (nom logique) SeekEoln (nom logique)
caractres de tabulation avant
deffectuer le test.
Fonction identique Fin_Fichier (Eof)
mais supprimant les espaces et les
Chercher_Fin_fichier (nom logique) SeekEof (nom logique)
caractres de tabulation avant
deffectuer le test.
Ouvrir un fichier et positionner son
pointeur la fin pour ajouter des Ajouter (nom logique) Append (nom logique)
enregistrements.
Placer le pointeur du fichier texte au
Lire_nl (nom logique) Readln (nom logique)
dbut de la ligne suivante
Introduire dans le fichier texte une
squence CR_LF pour marquer la fin de Ecrire_nl (nom logique) Writeln (nom logique)
ligne
Profs: MSEKNI Dalila & SFAR Hayet page-11/13-
me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Remarques:

Pour crire une ligne dans un fichier texte on peut utiliser lune des deux mthodes
suivantes :

Writeln (F, ligne) ; Write (F, ligne) ;


Writeln (F);

Pour lire une ligne partir dun fichier texte on peut utiliser lune des deux mthodes
suivantes :
Repeat
Readln (F, ligne) ;
Until .

Si lobjet ligne est de type :


Char : cette commande permet de lire un caractre par ligne
Integer : cette commande permet de lire un entier par ligne
String : cette commande permet de lire une ligne complte

Repeat
Read (F, ligne) ;
Until .
Readln(F);

Si lobjet ligne est de type :


Char, integer ou string : cette commande permet de lire une ligne complte

Pour supprimer les espaces au dbut dun fichier Texte :


SeekEof (F) ;

Pour supprimer les espaces au dbut de chaque ligne dun fichier Texte :
SeekEoln (F) ;

Exercice :

Ecrire un programme permettant de :

saisir et enregistrer une liste des noms des enseignants. La liste se termine
par un point (le point nappartient pas au fichier)
dterminer et afficher le nombre de lettres par nom denseignant.

Profs: MSEKNI Dalila & SFAR Hayet page-12/13-


me
Chap1 : Les enregistrements et les fichiers Classe : 4 SI

Program Exercice;
Uses wincrt;
Var F: text; nom: string;

Procedure compter (var f: text);


Var car: char; nbl: integer;
Begin
Reset (f);
While not (eof (f)) do
Begin
nbl: = 0;
While not (eoln (f)) do
Begin
Read (f, car);
If upcase (car) in ['A'..'Z'] then nbl: = nbl +1;
End;
Writeln ('le nombre de lettres = ', nbl); Readln (f);
End;
End;

Procedure saisie (var f: text);


Var ph: string [10]; rep: char;
Begin
Write ('donner un nom d''enseignant :'); readln (ph);
While ph [length (ph)] <>'.' do
Begin
Writeln (f, ph);
Write ('donner un nom d''enseignant :');
Readln (ph) ;
End;
End;

BEGIN {PP}
Write ('entrer le nom du fichier : ');
Readln (nom);
Assign (F, 'c: \'+nom+'.fch');
{$I-}
Reset (F);
{$I+}

If ioresult<>0 then
Begin
Rewrite (F);
Saisie (f);
End;
Compter (f);
Close (f);

END.

Profs: MSEKNI Dalila & SFAR Hayet page-13/13-

Vous aimerez peut-être aussi