problème lecture de fichier texte en ada

problème lecture de fichier texte en ada - Ada - Programmation

Marsh Posté le 07-02-2013 à 11:47:49    

bonjour, je dispose d'un fichier texte qui se présente de la forme suivante :
0.0000000
0.0000500
0.0001000
0.0001500
0.0002000
0.0002500
0.0003000
0.0003500
0.0004000
0.0004500
0.0005000
 
mon but étant de lire le fichier texte et de pouvoir intégrer ces valeurs dans un tableau donc voici mon code :
 
WITH Text_Io;
USE Text_Io;
PROCEDURE gaussienne2 IS
   F : File_Type;
   C : Character;
   TYPE Valeur_Vitesse IS ARRAY (1..150000) OF Character;
   Val:Valeur_Vitesse;
   I:Integer:=1;
   
BEGIN
   Open(F,In_File,"vitesse1.txt","" );
   -- on ouvre le fichier de nom truc.txt
   -- dans le programme on l'appelle F
   
   WHILE NOT End_Of_File(F) LOOP
      IF End_Of_Line(F) THEN
         i:=i+1;
         Get(F,C); -- on lit un caractere dans F
         New_Line;
      ELSE
         Get(F,C); -- on lit un caractere dans F
         val(i):=c;
         --Put(c);   -- on affiche c a l'ecran
      END IF;
   END LOOP;
   Close(F);  -- fermeture de f
       
   FOR K IN 1..I LOOP
      Put(character'val(K));
   END LOOP;
   
END gaussienne2;

 
Mon put(c) m'affiche correctement les valeurs , en revanche ma boucle tout a la fin de m'affiche pas les valeurs du fichier texte dans le tableau et je ne trouve pas l'erreur ..
de même quand je lit mon fichier texte, ada va stocker ces valeurs dans le tableau sous forme de caractère, comment puis je avoir des integer ? de manière a pouvoir traiter ces nombres par la suite. en vous remerciant de votre aide,
gargui

Reply

Marsh Posté le 07-02-2013 à 11:47:49   

Reply

Marsh Posté le 07-02-2013 à 13:12:35    

Tu peux lire des float avec Ada Float_Text_Io
Ou avec l'attribut value du type Float.

Reply

Marsh Posté le 07-02-2013 à 13:21:24    

ok du coup je pourrais les lire en considérant des float , en revanche je n'arrive pas a stocker les valeurs dans mon tableau .. :/

Reply

Marsh Posté le 07-02-2013 à 13:51:01    

gargui a écrit :

ok du coup je pourrais les lire en considérant des float , en revanche je n'arrive pas a stocker les valeurs dans mon tableau .. :/


T'arrive pas à lire ton tableau,
 
C'est sensé être ça ? :

Code :
  1. FOR K IN 1..I LOOP
  2.      Put(character'val(K));
  3.   END LOOP;


 
C'est put(Val(i));

Reply

Marsh Posté le 07-02-2013 à 14:26:18    

 J'ai modifié mon programme , grâce a ton aide je peux visualiser mes nombres , cependant je ne visualise que le dernier et je ne comprend pas pourquoi ..  car normalement a la fin du programme, ma premiere boucle va me permettre de parcourir mon tableau , et ma deuxieme boucle devrait me permettre dafficher la valeur dans la case.. la valeur est-elle bien stockée ?
 
BEGIN
   Open(F,In_File,"vitesse1.txt","" );
   -- on ouvre le fichier de nom vitesse.txt
   -- dans le programme on l'appelle F
   I:=1;
   j:=1;
   WHILE NOT End_Of_File(F) LOOP
      IF End_Of_Line(F) THEN
         I:=I+1; -- I permettant de parcourir mon tableau avec les valeurs de vitesse
         j:=1;     -- J permettant de parcourir les caractères pour chaque case du tableau
         Get(F,C); -- on lit un caractere dans F
         New_Line;
      ELSE
         Get(F,C); -- on lit un caractere dans F
         Val(J):=c;  -- je met le caractère dans la case
         J:=J+1;     -- j'incrémente pour ne pas écraser le caractère précedent
         --Put(c);   -- on affiche c a l'ecran
      END IF;
   END LOOP;
   Close(F);  -- fermeture de f
 
    FOR K IN 1..I LOOP
     FOR L IN 1..J LOOP
     PUT(Val(L));
      END LOOP;
   END LOOP;
   END Gaussienne2;

Reply

Marsh Posté le 07-02-2013 à 14:44:11    

Finalement, tu saisies des caractères ou des Float ?
 

Code :
  1. with Text_Io;
  2. with Ada.Float_Text_Io;
  3. use Text_Io;
  4. use Ada.Float_Text_Io;
  5. procedure Test is
  6.  
  7.   I : Natural := 0;
  8.   C : Float := 0.0;
  9.   F : File_Type;
  10.   type Valeur_Vitesse is array (1..150000) of float;
  11.   Val:Valeur_Vitesse;
  12. begin
  13.   Open(F,In_File,"vitesse1.txt","" );
  14.   -- on ouvre le fichier de nom vitesse.txt                                                                                                            
  15.   -- dans le programme on l'appelle F                                                                                                                  
  16.   I:=1;
  17.   while not End_Of_File(F) loop
  18.      if End_Of_Line(F) then
  19.         I:=I+1; -- I permettant de parcourir mon tableau avec les valeurs de vitesse                                                                    
  20.         Get(F,C); -- on lit un caractere dans F                                                                                                        
  21.         Val(I) := C;
  22.         New_Line;
  23.      else
  24.         -- can not occure.
  25.         Get(F,C); -- on lit un caractere dans F                                                                                                        
  26.         Val(J):=C;  -- je met le caractère dans la case                                                                                                
  27.         I:=I+1;     -- j'incrémente pour ne pas écraser le caractère précedent                                                                          
  28.                     --Put(c);   -- on affiche c a l'ecran                                                                                              
  29.      end if;
  30.   end loop;
  31.   Close(F);  -- fermeture de f                                                                                                                          
  32.  
  33.   for K in 1..I loop
  34.      PUT(Val(K));
  35.   end loop;
  36. end Test;

Reply

Marsh Posté le 07-02-2013 à 14:56:47    

bah quand je fait  Open(F,In_File,"vitesse1.txt","" ); le programme le prend comme une suite de caractère, donc je ne peux pas les interpréter comme des floats, donc ce que j'aimerais pouvoir faire cest stocker ces caractères dans le tableau, l'un après l'autre et après les transformer en float. Car je ne sais pas comment les interpréter directement comme float et les stocker un par un dans le tableau :/

Reply

Marsh Posté le 07-02-2013 à 18:24:18    

Ben t'as qu'as copier coller.
Dans le code ci-dessus, j'ai utilisé Ada.float_text_io qui lit et écrit dans un fichier texte.
Au lieux de lire caractère par caractère je lis un float.

Reply

Marsh Posté le 08-02-2013 à 10:40:53    

ok je vais essayer ca merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed