IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

[Ada] Erreur de lecture de fichier


Sujet :

Ada

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut [Ada] Erreur de lecture de fichier
    Bonjour à tous,

    J'ai une erreur de compilation pour un algorithme qui me semble bon.

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    --------------declaration---------------
    with Ada.Text_Io;
    use Ada.Text_Io;
    
    
    
    procedure Exo3 is
    
       type T_Promotion is
             (L1,
              L2,
              L3,
              L4,
              L5);
    
       subtype T_Chaine_80 is String(1 .. 80);
    
       type T_Chaine is
          record
             La_Chaine   : T_Chaine_80;
             La_Longueur : Natural;
          end record;
    
       type T_Identite is
          record
             Le_Nom    : T_Chaine;
             Le_Prenom : T_Chaine;
          end record;
    
       type T_Eleve is
          record
             L_Identite   : T_Identite;
             La_Promotion : T_Promotion;
          end record;
    
       F : Ada.Text_Io.File_Type;
    
    ---------procedure a probleme-------------------------------
       procedure Lister_Fichier_Texte (
             Fichier : in Ada.Text_Io.File_Type) is
          Car : Character;
    
       begin
          Ada.Text_Io.Open(Fichier,Ada.Text_Io.In_File,"entree.txt"); --actual for "file" must be a variable     
    
         while not Ada.Text_Io.End_Of_File(Fichier) loop
             Ada.Text_Io.Get(Fichier,Car);
             Ada.Text_Io.Put(Car);
          end loop;
    
          Close(Fichier); --actual for "file" must be a variable   
    end Lister_Fichier_Texte;

    voila, merci d'avance

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Merci d'utiliser la balise [code] pour amméliorer la lisibilité du message.

    En fait le seul problème dans ta procédure est que la procédure Open prend un premier paramètre avec le mode in out (même si tu ne fais que lire ce fichier), donc le paramètre de ta procédure Lister_Fichier_Texte doit lui aussi prendre son paramètre avec le mode in out.


    Et puis quelque chose qui n'a rien à voir : sachant que tu as déclaré use Ada.Text_Io; tu n'est pas obligé de donner le chemin complet des procédures et types de ce package que tu utilise. Tu pourrais par exemple simplement dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure Lister_Fichier_Texte (Fichier : in out File_Type) is
    D'autant plus que tu n'as pas donné le chemin complet pour la procédure Close.


    PS : j'aime pas trop la façon dont adagide "reformatte" le code.


    [edit]Ceci pourrait t'être utile : http://www.iuma.ulpgc.es/users/jmira...extio__ads.htm
    ainsi que :http://www.iuma.ulpgc.es/users/jmiranda/gnat-rts/rts/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    J'ai bien rajouté "in out" en paramètres de ma procedure.
    Ensuite, j'ai déclaré F:ada.text_io.file_type

    Et dans le programme principal, j'appele ma procedure de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
     
          Lister_Fichier_Texte(F);
     
       end Exo3;
    Mais voilà, il n'y a pas d'erreurs de compilation, mais il y a une erreur à l'execution :
    raised ada.io_exceptions.name_error : s-fileio.adb:889
    Merci déjà pour cette première réponse.

  4. #4
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Pour le corps de la procédure principal j'avais bien deviné ce qu'elle contennait.

    À vu de nez je dirais que l'erreur vient du fait que tu essaye de lire un fichier qui n'existe pas.

    Concernant le code, je pense que tu ferais mieux de déclarer les variables qui se rapportent à ta procédure principale après tes sous-procédures.

    Mais personnellement je te proposerais cette variante qui marche mais qui bufferise une ligne complète, ce qui peut être inadapté pour les grands fichier binaires, Mais elle a l'avantage de conserver les retours à la ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    with Ada.Text_IO;
    use Ada.Text_IO;
     
     
    procedure Cat is
    	procedure Lister_Fichier_Texte (Fichier : in out File_Type) is
    		S : String (1..65535);
    		L : Natural;
    	begin
    		Open(Fichier, In_File, "entree.txt");
    		while not End_Of_File(Fichier) loop
    			Get_Line(Fichier, S, L);
    			Put_Line(S(1..L));
    		end loop;
    		Close(Fichier);
    	end Lister_Fichier_Texte;
     
    	F : File_Type;
     
    begin
     
    	Lister_Fichier_Texte(F);
     
    end Cat;
    Sinon tu as aussi la méthode de traiter le fichier comme un flux, mais je te laisse chercher.



    PS : où fais-tu tes études ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    Je suis en première année d'école d'ingénieur en informatique(IG2i à Lens), en fait là je révisais pour un contrôle TP, donc merci de l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur sur lecture/ecriture fichier
    Par HeB91 dans le forum SharePoint
    Réponses: 2
    Dernier message: 26/01/2010, 10h29
  2. Aide pour gestion d'erreur de lecture de fichier
    Par mbellemax dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/11/2008, 01h42
  3. [PDF] Erreur de lecture du fichier jpeg avec pdf_open_image_file.
    Par youri89 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/06/2008, 17h10
  4. [FTP] Erreurs de lectures de fichiers
    Par JamesP dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2007, 19h06
  5. Erreur de lecture de fichier HyperFile
    Par wkd dans le forum WinDev
    Réponses: 2
    Dernier message: 19/07/2006, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo