La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CPI/BTS 1 Algorithmique & Programmation Les Fichiers Algo – Prog CPI/BTS1 – M. Dravet – 21/04/2004 Dernière modification: 21/04/2004.

Présentations similaires


Présentation au sujet: "CPI/BTS 1 Algorithmique & Programmation Les Fichiers Algo – Prog CPI/BTS1 – M. Dravet – 21/04/2004 Dernière modification: 21/04/2004."— Transcription de la présentation:

1 CPI/BTS 1 Algorithmique & Programmation Les Fichiers Algo – Prog CPI/BTS1 – M. Dravet – 21/04/2004 Dernière modification: 21/04/2004

2 Introduction Fichier: –structure de données, formée de cellules contiguës –Est stocké en mémoire de masse: Disque dur Disquette Bandes CDs …

3 Introduction Les disques magnétiques (disque dur) –Ensemble de surfaces circulaires en rotation constante –Sur chacune de ces surfaces se trouve une tête de lecture/écriture –L’ensemble des têtes se déplace de façon solidaire suivant un rayon des surfaces –Sur chacune des surfaces circulaires se trouve un certain nombre de pistes concentriques –Sur ces pites, l’information est organisée en unités de taille fixe (typiquement 512 bytes) appelées « secteurs ». –Position d’un secteur = surface sur laquelle il se trouve + piste sur cette surface + position sur cette piste –Ensemble des pistes se trouvant à une position identique sur chaque surface = cylindre

4 Introduction Les disques magnétiques –Chaque position des têtes de lecture définit un cylindre constitué de l’ensemble des secteurs accessibles dans cette position des têtes. –La capacité de stockage d’un disque dépend du nombre de surfaces, du nombre de pistes par surface, et de la capacité de chaque piste. –Quelques ordres de grandeur courants: Nombre de surfaces: de 1 à 30 Nombre de pistes par surface: de 2000 à 5000 Capacité de stockage d’une piste: 50 à 300 secteurs de 512 bytes (le nbre de secteurs/piste peut varier d’une piste à l’autre pour exploiter le fait que les pistes extérieuressont plus longues que les pistes intérieures)

5 Introduction Les disques magnétiques –Exemple Un disque comporte 24 surfaces, 5000 pistes par surface, et une moyenne de 200 secteurs de 512 bytes par piste. Capacité totale de ce disque : 24 * 5000 * 200 * 512 = 12 GBytes

6 Introduction Les disques magnétiques –La taille des secteurs est fixée à la construction du disque. –Toutefois, les transferts entre l’ordinateur et le disque se font par blocs qui peuvent être constitués de un ou plusieurs secteurs. –Sur un disque dont les secteurs sont de 512bytes, il est par exemple possible d’utiliser des blocs de 1024 bytes ou de 2048 bytes (respectivement 2 et 4 secteurs).

7 Introduction Avantages de la mémoire de masse –Persistance des données –Capacité du support Inconvénients: –Lenteur extrême (10e6 * plus lent que la RAM) –Plusieurs types de fichiers: dépendant de l’OS pour leur gestion (Ex: accès direct) dépendant du support (bandes non adressables)

8 Notion de fichier La manière la plus directe d’exploiter un disque est d’utiliser les opérations d’entrées/sorties correspondantes. Ces opérations sont fournies par l’OS, et embellies ou améliorées par les différents langages de programmation. Ex: on pourrait utiliser un appel système du type: Write(Nom_DISQUE, ADR_DONNEE, ADR_DISQUE) Cela aurait pour effet d’écrire sur le disque portant le nom « Nom_Disque » la donnée contenue à l’adresse « ADR_DONNEE » en mémoire vive, le tout à l’adresse sur le disque correspondant à « ADR_DISQUE » …compliqué.

9 Notion de fichier De plus cela n’est pas suffisant: –Il faut pouvoir retrouver les données sur le disque une fois celles-ci écrites dessus. Quand on relance la machine, comment sait t’on dans quel bloc se trouve la donnée ? –Il est souvent nécessaire de structurer les données écrites sur un disque en vue d’en permettre une manipulation rapide. –Il faut assurer la protection des données, pour ne pas qu’on les efface accidentellement (système mono-utilisateur) ou que quelqu’un d’autre puisse les modifier facilement (multi-utilisateur)

10 Notion de fichier D’où la notion de fichier –On attribue à un ensemble de données un nom symbolique –L’OS prend alors en charge la tâche de créer un fichier avec ce nom symbolique. Il trouve donc sur le disque un nombre de blocs libres suffisant pour contenir les données du fichier et associe le nom symbolique à ces blocs du disque (par exemple dans une table réservée à cet usage) –Une fois le fichier créé, l’OS permet la manipulation des données qui y sont contenues à l’aide d’appels au système. Ex: nouvelle écriture de données ou lecture de son contenu. Pour toutes ces opérations, le fichier est identifié par son nom.

11 Organisation des fichiers Comment structure t’on un fichier ? –L’organisation des fichiers se fait en termes de groupements élémentaires de données que l’on appelle enregistrements (records). –L’enregistrement est l’unité de base dans les méthodes de structuration des fichiers et dans les opérations sur les fichiers. –Les ordres de lecture/écriture concernant un fichier seront donc donnés en termes d’enregistrements. –La nature des enregistrements est choisie au moment de la création du fichier. On l’adapte à l’utilisation que l’on compte faire du fichier.

12 Organisation des fichiers Comment structure t’on un fichier ? –Exemple: Considérons un fichier dont le contenu est le nom, prénom adresse et numéro de téléphone d’un ensemble de personnes. Dans ce fichier, un enregistrement sera l’ensemble des données concernant une seule personne. Dans le cas d’un fichier dont le contenu est un texte sans structure particulière, un enregistrement sera un caractère. On utilise la même notation que celle des types de données appelés enregistrements que l’on a déjà vu dans les cours précédents.

13 Organisation des fichiers Comment structure t’on un fichier ? –Exemple: Type personne = enregistrement Nom: chaîne[30] Prénom: chaîne[30] Adresse: chaîne[50] Téléphone: chaîne[10] Fin enregistrement fpersonne = fichier de personne Var p1: personne f: fpersonne

14 Organisation des fichiers Comment structure t’on un fichier ? –Dans l’exemple précédent, nous avons déclaré un enregistrement de données, constitué de plusieurs champs … –… et un fichier déclaré comme fichier allant stocker des enregistrements de personnes. –On peut donc maintenant lire et écrire directement des personnes dans notre fichier à l’aide d’instructions du type: //lit la personne en cours dans f et la copie dans p1 si p1 est une variable de type personne Lire(f, p1) //écrit la variable p1 dans le fichier Ecrire(f, p1)

15 Organisation des fichiers Comment structure t’on un fichier ? –Pour conclure: Un bloc est un ensemble de données manipulées en une seule opération au niveau du périphérique de stockage/ La taille des blocs est fixée une fois pour toute lors de l’installation du disque. Un enregistrement est un ensemble de données manipulées en une seule opération au niveau du fichier. Sa taille varie (en fonction des champs contenus dans l’enregistrement) et doit être définie pour chaque fichier. Rôle du système de gestion de fichier (OS + système): convertir les opérations de manipulation des enregistrements d’un fichier en opérations de manipulation de blocs.

16 Types de fichiers Types de fichiers: –Séquentiels On lit tout le fichier depuis le début jusqu’à la fin ou jusqu’à ce qu’on ai trouvé l’information voulue –Relatifs/Direct/Dynamiques Possibilité de se positionner à un endroit précis d’un fichier en vue d’une lecture. Cela fonctionne avec un système de « clés » associées à chaque enregistrement.

17 Manipulation des fichiers La description d’un fichier –Avant d’utiliser un fichier, il faut spécifier comment celui-ci est organisé et donner ses caractéristiques. Les informations suivantes sont habituellement requises: Nom du fichier Type des enregistrements (ou de données) Méthode d’organisation/d’accès: séquentiel, direct …

18 Manipulation des fichiers La description d’un fichier –En algo, cela s’écrit: Type fpersonne = fichier séquentiel de personnes Var f: fpersonne –En pascal: Type fpersonne = file of personnes Var f: fpersonne

19 Manipulation des fichiers L’attribution d’un nom de fichier –Après avoir définit un type de fichier, il faut lui associer un nom logique sur le disque. –En algo, cela s’écrit (dans le bloc de code du programme/fonction/procédure) Assigner(f, « c:\gestion_contact\repertoire.ext ») –En pascal: AssignFile(f, «c:\gestion_contact\repertoire.ext »)

20 Manipulation des fichiers Initialisation d’un fichier –Plusieurs cas: On veut ouvrir un fichier existant: –En algo: ouvrir(f) –En pascal: reset(f) Si le fichier n’existe pas, cela déclenche une erreur, qui si elle n’est pas traitée, fait planter le programme. On veut créer un fichier et l’ouvrir: –En algo: réécrire(f) –En pascal: rewrite(f) Si le fichier existe déjà, cela le recrée (efface tout le contenu)

21 Manipulation des fichiers Lecture/écriture dans un fichier –La lecture ou l’écriture se fait enregistrement par enregistrement comme nous l’avons déjà vu. –Opérations simples: En algo: –Lire(f, p1) –Ecrire(f,p1) En pascal: –Read(f,p1) –Write(f,p1)

22 Manipulation des fichiers Lecture/écriture dans un fichier –Il faut bien sur que p1 soit du même type que la déclaration du fichier, dans l’exemple précédent … –Les fichiers nous donnent aussi accès à un autre type de fonction: la détection de fin de fichier. En algo: fin_de_fichier(f) En pascal: eof(f) //pour « end of file » –Cela est très utile pour lire un fichier jusqu’au bout comme nous allons le voir …

23 Manipulation des fichiers Lecture/écriture dans un fichier –Exemple: on veut remplir un tableau de personnes, à partir d’un fichier de personnes. –En algo: Type Personne = enregistrement nom: chaîne[30] prenom: chaîne[30] age: entier Fin enregistrement Fpersonne: fichier de Personne Tpersonne: tableau[0..N] de Personne

24 Manipulation des fichiers Var t: Tpersonne f: Fpersonne i: entier Début Assigner(f, « c:\tmp\tmp.dat ») ouvrir(f) i  0 Tant que pas (fin_de_fichier(f)) Faire Début lire(f, t[i]) i  i+1 Fin Fin Tantque Fin

25 Manipulation des fichiers Lecture/écriture dans un fichier –Exemple: on veut remplir un fichier de personnes à partir d’un tableau de personnes –En algo: Type Personne = enregistrement nom: chaîne[30] prenom: chaîne[30] age: entier Fin enregistrement Fpersonne: fichier de Personne Tpersonne: tableau[0..N] de Personne

26 Manipulation des fichiers Var t: Tpersonne f: Fpersonne i: entier Début Assigner(f, « c:\tmp\tmp.dat ») réécrire(f) Pour i de 0 à N Faire Ecrire(f, t[i]) Fin Pour Fin

27 Manipulation des fichiers Fermeture d’un fichier –Un fichier ouvert consomme un descripteur de ressource en mémoire. –De plus, un fichier ouvert dans une application peut le rendre inaccessible à une autre application (problèmes d’accès concurrents). –Il est donc très important de bien gérer les accès aux fichiers, c’est-à-dire de les ouvrir quand on en a besoin, et de les refermer dès que c’est possible (à moins que cela ne puisse engendrer des problèmes, ceci est à définir lors de l’analyse de l’application). –En algo: fermer(f) –En pascal: close(f)

28 Erreurs E/S Gestion des erreurs –opérations de manipulation de fichiers sujettes à de nombreuses erreurs indépendantes du programme, tentative d'ouverture avec Reset d'un fichier qui n'existe pas, tentative de création avec Rewrite d'un fichier sur un disque qui n'existe pas Etc. –Lorsqu'une erreur survient, Turbo Pascal termine en général le programme en cours de façon brutale.

29 Erreurs E/S Gestion des erreurs –il existe cependant un moyen d'éviter cette fin prématurée. Il s'agit de la directive de compilation {$I-}. –Après cette directive, les erreurs dues aux fichiers ne provoquent plus un arrêt du programme. –La directive {$I+} rétablit la situation normale. –Le programme ainsi protégé d'une fin brutale doit cependant être en mesure de reconnaître si les opérations qu'il a demandées ont pu être effectuées correctement.

30 Erreurs E/S Gestion des erreurs –la fonction IOResult joue le rôle de détecteur d’erreur. –Elle renvoie un code sous forme d'entier de type Integer qui indique l'erreur survenue lors de la dernière opération effectuée sur un fichier. –Le code 0 indique une absence d'erreur. Tout autre code indique une erreur. –Utilisation conseillée d’une variable temporaire pour copier IOResult car le fait de lire IOResult vide son contenu

31 Erreurs E/S Gestion des erreurs –Codes courants de IOResult : 2-Fichier introuvable, 4-Répertoire introuvable, 5-Fichier protégé en écriture (attribut lecture seule ou disquette protégée contre l'écriture). –Aide de Delphi pour les autres …

32 Erreurs E/S Gestion des erreurs –Exemple: Assigner(f,'c:\datas\monfic.dat'); { associer f à un fichier DOS } {$I-} { protection erreur } ouvrir(f); { ouverture } {$I+}{ fin protection erreur } Erreur  IOresult { backup dans var temp } Si Erreur<>0 Alors { test erreur } Début Si erreur = 2 alors …{ test du type de problème } Fin

33 Exercice n°1 Tester les temps d’accès en lecture et écriture d’un fichier sur disque par rapport à un tableau en mémoire. Pour se faire: –Déclarez un tableau de 0 à N enregistrements (type de donnée simple ou composé) –Déclarez un fichier de même type que le tableau –Remplissez le tableau aléatoirement en mesurant le temps nécessaire à cette opération –Faites de même pour le fichier, et comparez les 2 temps

34 Exercice n°1 Indication: –Mesure du temps à un instant T: Uses DateUtils; Var h1, h2 : TDateTime; h1 := time(); h2 := time(); Writeln(‘Difference: ‘, SecondsBetween(h1, h2)); Précision à la seconde près. Pour la milliseconde: MilliSecondsBetween(h1, h2);

35 Exercice n°2 Modifiez votre gestionnaire de contact afin de pouvoir enregistrer votre liste sur un fichier Au lancement du programme, chargez le fichier et alimentez le tableau de contacts à partir du contenu du fichier. L’ensemble des opérations d’ajout, modification, suppression se fait sur le tableau en mémoire, comme jusqu’à présent. Enregistrez le tableau dans le fichier lorsqu’on quitte le programme. Donnez la possibilité à l’utilisateur de créer un fichier de backup.


Télécharger ppt "CPI/BTS 1 Algorithmique & Programmation Les Fichiers Algo – Prog CPI/BTS1 – M. Dravet – 21/04/2004 Dernière modification: 21/04/2004."

Présentations similaires


Annonces Google