Un exemple d'utilisation des fichiers texte en Ada.



Documents pareils
Algorithmique et programmation : les bases (VBA) Corrigé

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TD3: tableaux avancées, première classe et chaînes

.NET - Classe de Log

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Génie Logiciel avec Ada. 4 février 2013

Arbres binaires de recherche

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Recherche dans un tableau

Cours 14 Les fichiers

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

1. Utilisation du logiciel Keepass

Paginer les données côté serveur, mettre en cache côté client

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Cours Informatique Master STEP

STAGE IREM 0- Premiers pas en Python

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

R01 Import de données

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Application 1- VBA : Test de comportements d'investissements

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Examen Médian - 1 heure 30

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Utilitaires méconnus de StrataFrame

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Système clients serveur Kwartz Vulgarisation, identification, dossier personnel

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

LES TYPES DE DONNÉES DU LANGAGE PASCAL

CRÉER UN DVD VIDEO avec DVD FLICK (avec ou sans menu)

FAIRE SES COMPTES AVEC GRISBI

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

inviu routes Installation et création d'un ENAiKOON ID

1. Structure d'un programme FORTRAN 95

DE MODIFICATION PROCEDURE ELYXBADGE APPLICATION. PI Électronique Restobadge

TRAVAUX DIRIGES D'INFORMATIQUE INITIATION A LA MANIPULATION DE WINDOWS 98

1 Gestionnaire de Données WORD A4 F - USB / / 6020 Alco-Connect

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction à JDBC. Accès aux bases de données en Java

Présentation du PL/SQL

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programme awk------introduction rapide

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Projet de programmation (IK3) : TP n 1 Correction

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Petit guide d'installation de l'option de connexion réseau

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Corrigé des TD 1 à 5

79140 CERIZAY. Collège G. CLEMENCEAU. Page 1 sur 18

Algorithmique & programmation

Organigramme / Algorigramme Dossier élève 1 SI

Service d information pour remise de paiement de factures Scotia

Algorithmique et Programmation, IMA

Programme Compte bancaire (code)

Saisir et traiter les engagements de coûts

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Le stockage local de données en HTML5

Importation des données dans Open Office Base

ACTIVITÉ DE PROGRAMMATION

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Chapitre 10. Les interfaces Comparable et Comparator 1

Sauvegarder sa messagerie Gmail sur son ordinateur

KeePass - Mise en œuvre et utilisation

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Configurer la supervision pour une base MS SQL Server Viadéis Services

Le langage VHDL. Eduardo Sanchez EPFL

Your Detecting Connection. Manuel de l utilisateur. support@xchange2.net

Compte-rendu de projet de Système de gestion de base de données

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

Introduction : Cadkey

1 Lecture de fichiers

Gestion des utilisateurs : Active Directory

PRÉSENTÉ PAR : NOVEMBRE 2007

Cadastre du bruit SIT-JURA. Connecteur Arcview9.x - MSAccess. Mode d emploi. Appel formulaire. Page 1 sur 15

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Suivi de la formation

TP 1 Prise en main de l environnement Unix

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

Cegid Business Line. Version 2008 Release 2. Service d'assistance Téléphonique

AWS avancé. Surveiller votre utilisation d EC2

Procédure serveur : gestion des environnements X3 et bases de données ORACLE

Manuel d'utilisation d'apimail V3

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Gestion de stock pour un magasin

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

Le prototype de la fonction main()

Europresse.com. Pour bibliothèque d enseignement Pour bibliothèque publique. Consulter facilement la presse. Guide version 1.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Cours d algorithmique pour la classe de 2nde

Transcription:

Un exemple d'utilisation des fichiers texte en Ada. Le programme suivant a pour objet de lire des tableaux 2D de caractères dont le contenu a été mémorisé dans des fichiers texte (lisibles et modifiables avec un éditeur de texte tel que Notepad, Gedit, Emacs ). Le type de ces tableaux est non contraint pour que le programme puisse manipuler des tableaux de taille quelconque. Chaque fichier peut donc contenir un tableau différent (en nombre de lignes et de colonnes). Le problème qui est posé est celui de la déclaration de variables tableaux dont les dimensions dépendent du traitement d'un fichier texte : en effet il faut : ouvrir le fichier pour y lire les dimensions du tableau, déclarer la variable tableau affecter à cette variable les valeurs contenues dans le reste du fichier texte. On a donc convenu que les fichiers contenant des tableaux 2D auraient une structure particulière. Un fichier doit contenir une première ligne avec deux entiers N et M : N est le nombre de lignes du tableau, M son nombre de colonnes ; ensuite, les lignes suivantes du fichier (de la 2 ème à la dernière) contiennent le tableau lui-même à raison d'une ligne de fichier par ligne du tableau, ex : le fichier lab1.txt ci-dessous. Ces conventions facilitent la lecture. La solution consiste à lire tout d'abord les dimensions du tableau N et M, puis utiliser un bloc Declare Begin End; pour déclarer et dimensionner le tableau ; le corps de ce bloc consiste à lire des caractères à l'aide d'une double boucle for (une boucle for externe pour les lignes, une boucle for interne pour les colonnes) ; le nombre d'itérations des boucles est contrôlé par N et M qui ont été lus précédemment. Pour illustrer l'utilisation de tableaux 2D et leur sauvegarde sur des fichiers texte, on a repris l'exemple des tableaux de caractères représentant des labyrinthes (voir TD3).

with Ada.Text_Io, Ada.Integer_Text_Io; use Ada.Text_Io, Ada.Integer_Text_Io; procedure Test_Lecture_Fichiers is --************* -- declarations --************* --******************** -- types et sous-types --******************** type Un_Labyrinthe is array(natural range <>, Natural range <>) of Character; -- specs des ss-programmes procedure Lire_Labyrinthe(F : in File_Type; Le_Labyrinthe : out Un_Labyrinthe); procedure Afficher_Labyrinthe(Le_Labyrinthe : in Un_Labyrinthe); procedure Test_Chargement_Labyrinthe_Depuis_Fichier; -- corps des ss-programmes procedure Lire_Labyrinthe(F : in File_Type; Le_Labyrinthe : out Un_Labyrinthe) is --lecture d'un tableau 2D dans un fichier deja ouvert for Line in Le_Labyrinthe'range(1) loop for Colum in Le_Labyrinthe'range(2) loop Get(F, Le_Labyrinthe(Line, Colum)); -- lecture d'un caractere dans le fichier et remplissage d'une case du tableau Skip_Line(F); -- une ligne entiere a ete lue. On se positionne sur la ligne suivante. end Lire_Labyrinthe; procedure Afficher_Labyrinthe(Le_Labyrinthe : in Un_Labyrinthe) is New_line; for Line in Le_Labyrinthe'range(1) loop for Colum in Le_Labyrinthe'range(2) loop Put(Le_Labyrinthe(Line, Colum)); end Afficher_Labyrinthe; -- affichage ecran classique d'un tableau 2D

procedure Test_Chargement_Labyrinthe_Depuis_Fichier is FileName : String(1..300); -- nom physique du fichier (300 caracteres = longueur maximale toleree) NameLong : Natural; -- longueur reelle du nom (nombre de caracteres saisis avant l'appui sur la touche <Retour>) F : Ada.Text_Io.File_Type; -- nom symbolique du fichier Nb_Lignes, Nb_Colonnes : Natural; -- dimensions du labyrinthe (c'est un tableau 2D) Fini : Boolean; -- vrai des que l'utilisateur veut quitter ou des que le programme rencontre un probleme de fichier loop -- debut de la boucle Repeter Jusqu'à Put("Nom du fichier labyrinthe? "); Get_Line(FileName, NameLong); -- Get_Line retourne le nom du fichier et le nombre de caracteres sigificatifs if NameLong = FileName'Length then -- Dans le cas tres rare ou l'utilisateur saisirait un nom de 300 caracteres... Skip_Line; -- il faut effacer le caractere <Retour> qui suit la saisie sinon end if; -- cela peut perturber les saisies suivantes (saisies de Nb_Colonnes et Nb_Lignes) if NameLong = 0 then --L'utilisateur signale qu'il veut quitter le programme en appuyant directement sur <Retour> Fini := True; -- (=> le nom du fichier est donc de longueur=0 ; aucun des 300 caracteres n'a ete affecte) else Fini := False; Open(F, In_File, FileName(1..NameLong)); -- On essaie d'ouvrir le fichier (erreur possible sur le nom : cas 1) Get(F, Nb_Lignes); -- Le fichier existe : on lit le nb de lignes (erreur possible sur le contenu : cas 2) Get(F, Nb_Colonnes); -- puis on lit le nb de colonnes du labyrinthe (erreur possible sur le contenu : cas 2) Skip_Line(F); -- Si tout est ok, on se positionne sur la ligne suivante dans le fichier declare -- Creation d'un tableau labyrinthe aux dimensions lues dans le fichier Le_Labyrinthe : Un_Labyrinthe(1..Nb_Lignes, 1..Nb_Colonnes); -- Remplissage du tableau qui vient d'etre cree Lire_Labyrinthe(F, Le_Labyrinthe); -- on passe la main au ss-programme (erreur possible sur le contenu du fichier) Close(F); -- Si tout s'est bien passe, on peut refermer le fichier qui avait ete ouvert Afficher_Labyrinthe(Le_Labyrinthe); -- On affiche le labyrinthe (pour verification du ss-prog de lecture) end; exception -- Traitement des exceptions liées aux fichiers (attention le fichier est peut-être encore ouvert) when Ada.Text_Io.Name_Error => --cas 1 ou le nom de fichier est incorrect (il n'a pas pu etre ouvert) Put_Line ("Aucun fichier de ce nom! Fin du programme. Ciao... "); Fini := true; when Ada.Text_Io.Data_Error => --cas 2 ou le contenu du fichier est incorrect (ce fichier est encore ouvert..) Close(F); -- il faut penser a le refermer Put_Line("Le fichier existe mais son contenu est incorrect! Fin du programme. Ciao... "); Fini := true; end; end if; exit when Fini; -- sortie de la boucle Repeter Jusqu'à (Fini=True) end Test_Chargement_Labyrinthe_Depuis_Fichier;

**** --corps du programme principal **** Test_Chargement_Labyrinthe_Depuis_Fichier; end Test_Lecture_Fichiers; Exemples de fichiers : Fichier bien construit Fichier bien construit Fichier mal construit (la lecture va planter car (5 lignes 7 colonnes) (15 lignes 26 colonnes) il n'y a pas 15 lignes de 35 caracteres)

Exemples d'exécution : Tests sur 3 fichiers existants dont l'un est mal construit Test sur un fichier inexistant