Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1496 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  [ADA][Résolu]raised ADA.IO_EXCEPTIONS.STATUS_ERROR et get()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ADA][Résolu]raised ADA.IO_EXCEPTIONS.STATUS_ERROR et get()

n°1564380
FrenchFrog​ger
http://antony-ibanez.eg2.fr/
Posté le 24-05-2007 à 07:59:49  profilanswer
 

Bonjour, lorsque j'utilise ma fonction Charger() (qui sert à charger une sauvegarde contenue dans un fichier) il n'y a strictement aucun problème... sauf quand j'utilise par la suite get(): si j'utilise get(C) avec C un integer, je n'ai aucun problème si je n'utilise pas Charger() ou si j'utilise Charger() après le get(C). Mais si j'utilise le get(C) après le Charger() j'ai cette erreur:
raised ADA.IO_EXCEPTIONS.STATUS_ERROR : s-fileio.adb:166
Si j'ai bien compris, cette erreur arrive quand on tente une action dans un fichier fermé ou lorsqu'on essaye d'ouvrir un fichier déjà ouvert:
- Lorsque j'utilise get(C) avant Charger(), ça me lit C sur l'entrée standard.
- Mais lorsque j'utilise get(C) après Charger(), ça à l'air de vouloir lire C dans le fichier que j'ai ouvert puis fermé avec Charger(), malgré le fait que ce fichier soit fermé.
Je pense donc savoir d'où vient le problème... mais je ne sait pas comment le régler...
 
 
Voici la fonction Charger():
 

Code :
  1. procedure Charger(Nom_Fichier: String; pl : out ptr_plateau; tab_p : out ptr_pion; j1, j2: out joueur) is
  2.       temp: integer;
  3.       Texte: File_Type;
  4.       j : integer;
  5.       taille1, taille2: integer;
  6.       begin
  7.      
  8.      
  9.       for i in pl'range(1) loop   -- Initialiser le plateau avec des cases vides.
  10.      for j in pl'range(2) loop
  11.       pl(i,j).etat := false;
  12.   pl(i,j).p := 0;
  13.  end loop;
  14. end loop;
  15.      
  16.  -- Debut de lecture du fichier Nom_Fichier
  17.  Open(Texte, In_File, Nom_Fichier);
  18.  Set_Input(Texte);
  19.  Avancer;
  20.  Ignorer_Separateurs;
  21.      
  22.         -- Lecture de la premiere ligne concernant le joueur1 (voir infos dans sauvegarde.ads)
  23.         Lire_entier(j1.num);
  24.  Avancer;
  25.  Ignorer_Separateurs;
  26.  -- Lit la taille du string, un nombre qui peut être à plusieurs chiffres. Je créerai sûrement une fonction
  27.  -- pour lire les entiers à plusieurs chiffres.
  28.  taille1 := 0;
  29.  while Caractere_courant in '0'..'9' loop
  30.   Lire_entier(j);
  31.   Avancer;
  32.   taille1 := taille1 * 10 + j;
  33.  end loop;
  34.  Ignorer_Separateurs;
  35.        
  36.  j1.nom := new String(1..taille1);
  37.  j := 1;
  38.  while j <= taille1 loop
  39.   j1.nom.all(j) := Caractere_courant;
  40.  Avancer;
  41.  j := j + 1;
  42.  end loop;
  43.  Ignorer_Separateurs;
  44.        
  45.  Lire_entier(j1.nb_point);
  46.  Avancer;
  47.  Avancer;
  48.  Ignorer_Separateurs;
  49.  -- Lecture de la seconde ligne concernant le joueur2 (voir infos dans sauvegarde.ads)
  50.  Lire_entier(j2.num);
  51.  Avancer;
  52.  Ignorer_Separateurs;
  53.  taille2 := 0;
  54.  while Caractere_courant in '0'..'9' loop
  55.   Lire_entier(j);
  56.   Avancer;
  57.   taille2 := taille2 * 10 + j;
  58.  end loop;
  59.  Ignorer_Separateurs;
  60.        
  61.  j2.nom := new String(1..taille2);
  62.  j := 1;
  63.  while j <= taille2 loop
  64.   j2.nom.all(j) := Caractere_courant;
  65.  Avancer;
  66.  j := j + 1;
  67.  end loop;
  68.  Ignorer_Separateurs;
  69.          Lire_entier(j2.nb_point);
  70.  Avancer;
  71.  Avancer;
  72.  Ignorer_Separateurs;
  73.        
  74.  -- Lecture des 14 lignes concernant les 14 pions.
  75.         for j in 1..14 loop
  76.           Lire_entier(temp);
  77.  if temp = 0 then
  78.   tab_p(j).balle := false;
  79.  else
  80.   tab_p(j).balle := true;
  81.  end if;
  82.           Avancer;
  83.   Ignorer_Separateurs;
  84.          Lire_entier(tab_p(j).pos.x);
  85.          Avancer;
  86.   Ignorer_Separateurs;
  87.           Lire_entier(tab_p(j).pos.y);
  88.        
  89.   if tab_p(j).pos.x > 0 then
  90.            pl(tab_p(j).pos.x, tab_p(j).pos.y).etat := true;
  91.            pl(tab_p(j).pos.x, tab_p(j).pos.y).p := j;
  92.   end if;
  93.  Avancer;
  94.  Avancer;
  95.  Ignorer_Separateurs;
  96.         end loop;
  97.       Close(Texte);
  98.    end Charger;


 
Voici l'appel de la fonction, ici il appelle le fichier "essai":
 

Code :
  1. .... début du programme ...
  2. C: integer;
  3. begin
  4. Charger("essai", plat, tab_p, joueurs(1), joueurs(2));
  5.    get(C);
  6. ... suite du programme ...


Message édité par FrenchFrogger le 24-05-2007 à 09:35:14
mood
Publicité
Posté le 24-05-2007 à 07:59:49  profilanswer
 

n°1564398
FrenchFrog​ger
http://antony-ibanez.eg2.fr/
Posté le 24-05-2007 à 09:18:55  profilanswer
 

Je l'ai résolu. Il fallait terminer la fonction Charger() avec:

Code :
  1. Set_Input(Standard_Input);
  2. Close(Texte);


 
au lieu de:
 

Code :
  1. Close(Texte);


 
En effet au début de la fonction Charger je définissait le fichier définit par la variable Texte comme étant la nouvelle entrée standard. Il faut donc à la fin que je remette l'entrée standard par défaut (Standard_Input) comme étant l'entrée standard courante....
 
 
 
PS: le lien (bon lien) qui ma permit de capter le pb:
http://ina2.eivd.ch/collaborateurs [...] ts1Ada.pdf
Cherchez Standard_Input...


Message édité par FrenchFrogger le 24-05-2007 à 09:22:19

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  [ADA][Résolu]raised ADA.IO_EXCEPTIONS.STATUS_ERROR et get()

 

Sujets relatifs
[RESOLU][JAVA &SSH] Client ssh en java[Résolu]Problème d'affichage avec FCKEditor
[Resolu]Problem extension JPanel[RESOLU] Redimensionner une image
[RESOLU] Problème unlink[RESOLU]ListBox remplie avec un DataSet /2 champs dans le TextField
[ Resolu] Problème de lien !Savoir si la requête retourne un résultat ? (Résolu)
[Résolu] CSS : je voudrais une width (100%-largeur menu)tikiwiki (resolu)
Plus de sujets relatifs à : [ADA][Résolu]raised ADA.IO_EXCEPTIONS.STATUS_ERROR et get()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR