• Aucun résultat trouvé

Les fichiers

N/A
N/A
Protected

Academic year: 2022

Partager "Les fichiers"

Copied!
9
0
0

Texte intégral

(1)

Les fichiers

1. Motivation

2.Qu' 'est-ce qu'un fichier?

3.Types de fichier.

4. déclaration d'un fichier.

5.Principales commandes sur les fichiers.

6. Exemples d'utilisation d'un fichier.

7. Commandes additionnelles.

******************************************

(2)

1. Motivation

Toutes les structures de données que nous avons vues ont un point commun: elles résident toutes dans la mémoire principale de l'ordinateur. Ceci signifie que l'effacement (volontaire ou non!) de la

mémoire provoque la destruction de ces structures.

D'autre part il peut être nécessaire de conserver certaines données après la fin du programme les ayant créées, ceci en prévision d'une utilisation future.

Ces considérations nous amènent à introduire la notion de fichier disque.

Les fichiers de disque permettent de stocker des informations de manière permanente, sur un support externe une disquette ou un disque dur…

2.Qu'est-ce qu'un fichier?

Hors du monde informatique :un fichier est une collection de fiches.

Pour trouver une fiche il faut parcourir le fichier fiche après fiche ou utiliser une clé d'accès .

En informatique : un fichier est une structure de données toutes de même type mais dont le nombre n'est pas connu à priori. L'accès à un élément (à une donnée) du fichier se fait

- séquentiellement c-à-d en parcourant le fichier élément par élément depuis le début jusqu'à l'élément choisi

- directement en donnant la position de l'élément cherché.

- selon une clé chaque valeur de la clé désignant un élément . Un fichier possède:

• un identifiant (nom)

• un emplacement (lié au support)

• un contenu (données).

3.Types de fichiers : Ils se répartissent en deux catégories: selon le type d données qu’il contient.

- données de type enregistrement : fichier binaire (contient la structure de l’enregistrement) - données de type caractère : fichier texte

4.Déclaration d’un fichier

(3)

Type

nombre_complexe = record (* nombre complexe *) partie_reelle : real;

partie_imaginaire : real;

end;

fichier_entiers = file of integer;

fichier_nombres_complexes = file of nombre_complexe;

var

int_1, int_2 : integer;

nombre_1,nombre_2 : nombre_complexe;

fichier_int : fichier_entiers;

fichier_complexe : fichier_nombres_complexes;

Exemples:

const long_max_nom = 30;

long_max_titre = 40

type t_fich_entiers = file of integer;

t_fich_reels = file of real;

t_auteur_livre = string [ long_max_nom ];

t_titre_livre = string [ long_max_titre ];

t_livre_cote = record (* une fiche bibliographique *) nom_auteur : t_auteur_livre;

titre : t_titre_livre;

cote : integer;

end;

t_fichier_biblio = file of t_livre_cote;

var fichier_reponses : t_fich_entiers;

fichier_mesures : t_fich_reels;

bibliotheque : t_fichier_biblio;

(4)

Remarque :

Il existe un type fichier prédéfini: text .

Il existe deux (variables) fichiers prédéfinis: input et output de type text . 5.Principales commandes sur les fichiers

la notion d’identifiant de fichier :

nom externe : c’est le nom du fichier pour le système de fichier du système d’exploitation considéré, par exemple : mon_fichier.dat

nom interne : c’est le nom du fichier connu par le programme, il est déclaré par le programme, par exemple : Fichier_de_données

* nécessité d’associer le fichier physique à sa représentation interne : commande Assign 5. 1. Assignation physique :

assign ( < File >, < nom du fichier réel >);

• Exemples d’associations par assign : var Destination: String ;

FOrigine, FDestination: FILE OF Integer ; assign ( FOrigine, 'C:\DATA\Infile.Dat' );

readln ( Destination );

assign ( FDestination, Destination );

5. 2 • Indicateur de fin de fichier :

Eof ( < File > ) ; (Valeur booléenne, True / False) 5. 3• Procédures prédéfinies

Soit la variable exemple d'un type fichier quelconque. Les procédures applicables à exemple sont les suivantes:

rewrite ( exemple ) : ouvre le fichier exemple en écriture et l'initialise à la valeur "fichier vide" (le

(5)

fichier ne contient que la marque de fin de fichier).La fonction eof ( exemple ) est alors vraie.

reset ( exemple ) : ouvre le fichier exemple en lecture et positionne la fenêtre sur le premier élément. Si le fichier est vide la fonction eof ( exemple ) est vraie.

close ( exemple ) : ferme le fichier exemple .

read (exemple, donnee) : lit dans donnee l'élément suivant du fichier exemple write (exemple, donnee) : écrit la valeur de donnee à la fin du fichier exemple.

Lecture ou écriture :

On ouvre un fichier soit en lecture, soit en écriture. On ne peut pas faire les deux en même temps.

En lecture : on fait reset(f); puis des read(f, ...);

En écriture : on fait rewrite(f); puis des write(f, ...);

Si le fichier n'existe pas, un rewrite le crée. Si il existe déja, le rewrite l'écrase, c'est- a-dire que l'ancien contenu est définitivement perdu.

Fin du fichier

En lecture, avant de faire un read, il faut tester si il y a encore quelque chose à lire ; on n'a pas le droit de faire un read si la fin du fichier est atteinte.

La fonction eof(f) retourne true si la fin du fichier est atteinte.

6.Exemple d’utilisation d’un fichier typé

6. 1.Lecture d’un fichier de nombres réels et calcul de leur somme TYPE FichierSequentiel = FILE OF Real ;

VAR F: FichierSequentiel;

FUNCTION SommeFichierReel ( VAR Fichier: FichierSequentiel ): Real;

VAR X, S: Real ; BEGIN

S:=0;

(6)

WHILE NOT Eof ( Fichier ) DO BEGIN Read ( Fichier, X );

S := S + X

END ; (* -- WHILE, Eof( Fichier ) *) SommeFichierReel := S

END ; (* -- SommeFichierReel *) . . .

BEGIN

Assign ( F, 'C:\REELS.DAT' );

Reset ( F ); {* ouverture du fichier en mode lecture *) Writeln ( SommeFichierReel( F ) );

Close ( F ) END .

6. 2.Mettre un vecteur vec de nb éléments dans un fichier.

Program essai ; VAR

vec : array [1..vmax] of element_t;

nb, i : integer;

BEGIN

assign (f, nomf);

rewrite (f);

(7)

for i := 1 to nb do write (f, vec[i]);

close (f);

END;

6. 3.Copie d’un fichier binaire dans un autre

Program copie_de_fichiers (input, output, original, copie);

Const long_max_nom = 30; (* nombre maximal de caractères d’un nom *) long_max_titre = 80; (* nombre maximal de caractères d’un titre *)

Type t_auteur_livre = string [ long_max_nom ];

t_titre_livre = string [ long_max_titre ];

t_livre = record (* représente une fiche bibliographique *) titre : t_titre_libre; (* titre du livre *)

auteur : t_auteur_livre; (* nom de l'auteur *) ISBN : integer; (* cote en bibliothèque *) annee : integer; (* année de parution *) end;

t_fichier_biblio = file of t_livre;

Var original : t_fichier_biblio; (* fichier à copier *) copie : t_fichier_biblio; (* copie à créer *)

livre : t_livre ;

Begin (* copie_de_fichiers *)

(8)

assign (original, 'Original.dat'); (* association au fichier d’origine *) assign (copie, 'Copie.dat'); (* association au fichier duplicata *) reset (original); (* ouvrir le fichier à copier *)

rewrite (copie); (* initialiser la copie *)

while not eof (original) do (* parcourir le fichier à copier *) begin

read ( original , livre) ; (* copier l'élément courant d'une fenêtre dans l'autre *) write(copie , livre); (* écrire l'élément copié *)

end; (* while not eof (original) *)

close (original); close (copie); (* fermeture en fin de programme *) End. (* copie_de_fichiers *)

7. Commandes additionnelles :

filepos ( < File > ); (* position actuelle du repère *)

filesize ( < File > ); (* taille du fichier en enregistrements *) erase ( < File > ); (* efface le fichier File *)

rename ( < File >, < nouveau_nom > ); (* renomme le fichier *) : ces deux dernières commandes nécessitent que le fichier soit fermé avant de pouvoir être utilisées

seek ( < File >, < Num > ); (* positionne le repère sur l’enregistrement de numéro Num *) Exemple : Accès direct à un enregistrement dans un fichier par la commande seek (* déclarations de types *)

var BU : t_fichier_biblio;

Courant : t_livre;

(9)

Num : integer;

begin

(* assignation *) + (* ouverture *) reset (BU);

repeat

writeln ('quel est le numéro de l’enregistrement ?'); readln (Num);

until Num in [0..filesize(BU)-1];

seek (BU, Num);

read (BU, Courant);

with Courant do

writeln (titre, '/', auteur, '/', annee, '/', ISBN);

close (BU);

end.

Références

Documents relatifs

PS : pour la fabrication de l’outil de torsion, pour un résultat propre et dans les cotes désirées, pour un fil de 1.20 mm veuillez à ce que l’écart entre le bord plieur et le Ø

Si vous n'avez pas encore installé lame, laissez-vous guider pour mettre le fichier lame_enc.dll dans le répertoire d'audacity et pour le « dire» à audacity, ensuite vous n'aurez

La validation de ce formulaire emporte également consentement à la collecte, au stockage et à l'utilisation des informations figurant sur ce formulaire, leur transfert aux États-Unis

61 SW Seuil d’alarme supérieur pression différentielle pour la gamme r1 et r2 dans l’unité de mesure configurée (le multiplicateur dépend..

Si l’on devait faire un parallèle, il faudrait comparer ces valeurs avec ceux de l’ACP où on ne tenait pas compte de l’endogène pour élaborer les axes factoriels : nous

Nous introduisons maintenant le composant UNIVARIATE DISCRETE STAT (onglet STATISTICS) dans le diagramme, à la suite du DEFINE STATUS.. Nous activons menu VIEW pour accéder

Quatre tests sont automatiquement calculés : le test de SHAPIRO WILK – utilisable uniquement pour un effectif inférieur à 5000 observations ; le test de

public static void lireEnreg (String nomFichier) Lit dans le fichier client client dont le nom est passé en paramètre, un enregistrement et affiche sur la console les informations