J'apprends Ada et j'ai besoin de quelques clarifications sur les opérations de fichiers. J'ai juste un type: float et je dois créer 2 fichiers qui vont stocker des valeurs flottantes (avec l'opération d'ajout). Donc j'instancie un paquetage pour le type float et ensuite je déclare 2 variables de fichier X_File et Y_File. Ensuite, je mets des exceptions au cas où les fichiers n'existent pas déjà. J'ai deux exceptions distinctes pour chaque fichier xvalues.dat et yvalues.dat. Opération de fichier Ada: instanciation et exception
WITH Ada.Text_IO;
WITH Ada.Sequential_IO;
PROCEDURE TestWrite6 IS
PACKAGE Seq_Float_IO IS NEW Ada.Sequential_IO (Element_Type => Float);
X_File : Seq_Float_IO.File_Type;
Y_File : Seq_Float_IO.File_Type;
BEGIN
Seq_Float_IO.Open (File => X_File, Mode => Seq_Float_IO.Append_File,
Name => "xvalues.dat");
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (File => X_File, Mode => Seq_Float_IO.Out_File,
Name => "xvalues.dat");
Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File,
Name => "yvalues.dat");
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (File => Y_File, Mode => Seq_Float_IO.Out_File,
Name => "yvalues.dat");
END TestWrite6;
Maintenant, sur la compilation, je reçois le message d'erreur:
16.
17. Seq_Float_IO.Open (File => Y_File, Mode => Seq_Float_IO.Append_File, Name => "xvalues.dat");
18. exception
|
>>> exception handler not permitted here
19. when Seq_Float_IO.Name_Error =>
Il semble que je peux avoir une exception pour le xvalues.dat et non pas une seconde pour yvalues.dat. Qu'est-ce que je fais mal?
Merci beaucoup ...
Quelques modifications: écrire une procédure générale pour ouvrir et ajouter des valeurs dans un fichier:
WITH Ada.Sequential_IO;
WITH Ada.Float_Text_IO;
PROCEDURE TEST is
package Seq_Float_IO is new Ada.Sequential_IO (Element_Type => Float);
X_File : Seq_Float_IO.File_Type;
procedure Open_Data(File : in out Seq_Float_IO.File_Type;
Name : in String) is
BEGIN
begin
Seq_Float_IO.Open (
File => File,
Mode => Seq_Float_IO.Append_File,
Name => );
exception
when Seq_Float_IO.Name_Error =>
Seq_Float_IO.Create (
File => File,
Mode => Seq_Float_IO.Out_File,
Name => );
end;
END Open_Data;
x : CONSTANT Float := 2.0;
BEGIN --main program
Open_Data(X_File, "xvalues.dat");
Seq_Float_IO.Write(File => X_File,Item => x);
Seq_Float_IO.Close(File => X_File);
END TEST;
Dans la procédure Open_Data. J'ai laissé les 2 champs pour Name => blank car je ne sais pas quoi mettre dedans.
Et j'ai aussi mis Fichier => Fichier ... cela ne semble pas correct !!!
Merci. Ça marche! Bon à savoir sur la déclaration de bloc. – yCalleecharan
Oui, je vais également étudier comment créer un sous-programme ou une procédure appropriée. – yCalleecharan
Excellent! BTW, 'subprogram' est un terme Ada pour une fonction ou une procédure. Parce que 'File_Type' est limité privé, une procédure sera plus simple. Par exemple, 'procedure Open_Data (Fichier: in out Seq_Float_IO.File_Type; Nom: in String) est ...' – trashgod