Compter le nombre de lignes d'un fichier .

Compter le nombre de lignes d'un fichier . - Ada - Programmation

Marsh Posté le 18-01-2016 à 20:00:55    

Le prog suivant compte le nombre de lignes de son fichier .
 
Il se compile . Pourtant à l'execution on obtient l' erreur :
 
 raised ADA.IO_EXCEPTIONS.END_ERROR : a-textio.adb:1900
 
 

Code :
  1. WITH Ada.Text_IO ;              USE Ada.Text_IO ;
  2. WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
  3. WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;
  4.  
  5. Procedure main is
  6.  
  7.  this_file : File_type ;
  8.  
  9.  Last_case : Positive_Count := 1 ;
  10.  
  11. Begin
  12.  
  13.    Open
  14.     (File => this_file ,
  15.      Mode => In_file ,
  16.      Name => "main.adb" );
  17.  
  18.   loop exit when End_Of_File ( this_file ) ;
  19.     set_line( this_file , Last_case );
  20.  
  21.     Last_case := Last_case + 1 ;
  22.   end loop ;
  23.  
  24.   Close ( this_file );
  25.  
  26.   put ( Positive_Count'image(Last_case));
  27. End main ;


Message édité par eroge le 19-01-2016 à 04:48:47
Reply

Marsh Posté le 18-01-2016 à 20:00:55   

Reply

Marsh Posté le 19-01-2016 à 04:46:42    

J'ai modifié le code .
 
L' erreur disparait avec une exception , pourtant je ne comprends pas pourquoi ça affiche une ligne de trop .
 
Le résultat a l'execution est : 30 .
 

Code :
  1. WITH Ada.Text_IO ;              USE Ada.Text_IO ;
  2. WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
  3. WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;
  4.  
  5. Procedure main is
  6.  
  7.  this_file : File_type ;
  8.  
  9.  Last_case : Positive_Count := 1 ;
  10.  
  11. Begin
  12.  
  13.    Open
  14.     (File => this_file ,
  15.      Mode => In_file ,
  16.      Name => "main.adb" );
  17.  
  18.   loop
  19.     set_line( this_file , Last_case );
  20.  
  21.     Last_case := Last_case + 1 ;
  22.   end loop ;
  23.  
  24.    exception
  25.      when End_Error => Close ( this_file );
  26.  
  27.   put ( Positive_Count'image(Last_case));
  28.  
  29. end main ;

Reply

Marsh Posté le 28-03-2016 à 18:34:10    

Bonjour,
Pour eviter l'erreur peut-être utiliser End_Of_File qui retourne vrai en fin de fichier ce que permet d'arrêter la lecture du fichier.
En suite compter correctement. + 1 à partir de zero me parait une bonne chose.
Aussi fermer le fichier avant le traitement de l'exception.

Reply

Sujets relatifs:

Leave a Replay

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