Problème d'utilisation de Ada.Streams.Stream_Io;

Problème d'utilisation de Ada.Streams.Stream_Io; - Ada - Programmation

Marsh Posté le 09-12-2009 à 15:14:29    

Bonjour,
 
J'ai un petit problème à l'utilisation de Ada.Streams.Stream_Io;
 
je ne parvien même pas à récupérer Warch.Arch_Width au chargement après sauvegarde.
Le type à sauvegarder-recharger est T_Warch défini comme suit :
 

Code :
  1. type T_Register is array (Positive range <> ) of Pragmarc.Rem_Nn_Wrapper.Real;
  2.  
  3.   type T_Network(Width : Positive) is
  4.      record
  5.         Trainfile : Unbounded_String;
  6.         Train_Length : Positive := 1;
  7.         Converged : Real := 0.255;
  8.         Max_Epochs : Positive := 100_000;
  9.         RMS_Error : Real := 0.0;
  10.         Current_Epoch : Positive := 1;
  11.         Reuse_Network : Boolean := false;
  12.         Network   : Unbounded_String;
  13.      end record;
  14.  
  15.   type T_Node(Width : positive) is
  16.      record
  17.         Network : T_Network(Width);
  18.         Response: T_Register(1..Width);
  19.      end Record;
  20.   type Node_Access is access all T_Node;
  21.   type T_Arch is array (Positive range <> ) of Node_Access;
  22.   type Arch_Access is access all T_Arch;
  23.   type T_Warch  is
  24.      record
  25.         Arch_Width : Positive := 1;
  26.         Super_Network : Node_Access;
  27.         Arch : Arch_Access;
  28.      end record;


Notes : les registres ne sont pas sauvegardés.
 
Voici mon code de sauvegarde..
 

Code :
  1. procedure Save_Warch(Warch : in out T_Warch) is
  2.      Warch_File        : Ada.Streams.Stream_Io.File_Type;
  3.      Warch_File_Access : Ada.Streams.Stream_Io.Stream_Access;
  4.      Warch_Filename : constant String := "warch.wa";
  5.   begin
  6.      Text_Io.Put_Line("TOTO 0" );
  7.      Ada.Streams.Stream_IO.Create(Warch_File, Stream_Io.Out_File, Warch_Filename);
  8.      Text_Io.Put_Line("TOTO 1" );
  9.      Warch_File_Access := Ada.Streams.Stream_IO.Stream(Warch_File);
  10.      -- save current width of Warch --
  11.      Text_Io.Put_Line("TOTO 2" );
  12.      Positive'Write(Warch_File_Access, Warch.Arch_Width);
  13.      -- save archs --
  14.      Text_Io.Put_Line("TOTO 3" );
  15.      for I in 1..Warch.Arch_Width-1 loop
  16.         Positive'Write(Warch_File_Access, Warch.Arch(I).width);
  17.         string'Write(Warch_File_Access, Unbounded.To_String(Warch.Arch(I).Network.Trainfile));
  18.         Text_Io.Put_Line("TOTO 4" );
  19.         Positive'Write(Warch_File_Access, Warch.Arch(I).Network.Train_Length);
  20.         Text_Io.Put_Line("TOTO 5" );
  21.         Float'Write(Warch_File_Access, Float(Warch.Arch(I).Network.Converged));
  22.         Text_Io.Put_Line("TOTO 6" );
  23.         Positive'Write(Warch_File_Access, Warch.Arch(I).Network.Max_Epochs);
  24.         Text_Io.Put_Line("TOTO 7" );
  25.         Float'Write(Warch_File_Access, Float(Warch.Arch(I).Network.RMS_Error));
  26.         Text_Io.Put_Line("TOTO 8" );
  27.         Positive'Write(Warch_File_Access, Warch.Arch(I).Network.Current_Epoch);
  28.         Text_Io.Put_Line("TOTO 9" );
  29.         Boolean'Write(Warch_File_Access, Warch.Arch(I).Network.Reuse_Network);
  30.         Text_Io.Put_Line("TOTO 10" );
  31.         String'Write(Warch_File_Access, Unbounded.To_String(Warch.Arch(I).Network.Network));
  32.         Text_Io.Put_Line("TOTO 11" );
  33.      end loop;
  34.      delay 10.0;
  35.      Ada.Streams.Stream_IO.Close(Warch_File);
  36.   end Save_Warch;


 
Et mon code de chargement
 

Code :
  1. procedure Load_Warch(Warch : in out T_Warch) is
  2.                        --Source_Filename  : in String) is
  3.      Warch_File        : Ada.Streams.Stream_Io.File_Type;
  4.      Warch_File_Access : Ada.Streams.Stream_Io.Stream_Access;
  5.      Warch_Filename : constant String := "warch.wa";
  6.      Trainfile : String(1..256) := (others => Character'Val(32));
  7.      Network : String(1..256) := (others => Character'Val(32));
  8.      Width : Positive;
  9.   begin
  10.      Ada.Streams.Stream_IO.open(Warch_File, Stream_Io.Out_File, Warch_Filename);
  11.      Warch_File_Access := Ada.Streams.Stream_IO.Stream(Warch_File);
  12.      -- Load width of Warch --
  13.      Text_Io.Put("Load Warch of width = " );
  14.      Positive'read(Warch_File_Access, Warch.Arch_Width);
  15.      Text_Io.Put_Line(Integer'Image(Warch.Arch_Width));
  16.      -- Load archs --
  17.  
  18.      for I in 1..Warch.Arch_Width-1 loop
  19.         Text_Io.Put("network of width = " );
  20.         Positive'Read(Warch_File_Access,width);
  21.         Warch.arch(I) := new T_Node(Width);
  22.         Text_Io.Put_Line(Integer'Image(Warch.arch(I).width));
  23.         Text_Io.Put("train filename = " );
  24.         string'Read(Warch_File_Access, trainfile);
  25.         Warch.Arch(I).Network.Trainfile := Unbounded.To_Unbounded_String(Trainfile(1..Fixed.Index_Non_Blank(Trainfile, Ada.Strings.Backward)));
  26.         Text_Io.Put_Line(Unbounded.To_String(Warch.Arch(I).Network.Trainfile));
  27.         Positive'Read(Warch_File_Access,Warch.Arch(I).Network.Train_Length);
  28.         Float'Read(Warch_File_Access, Float(Warch.Arch(I).Network.Converged));
  29.         Positive'Read(Warch_File_Access,Warch.Arch(I).Network.Max_Epochs);
  30.         Float'Read(Warch_File_Access, Float(Warch.Arch(I).Network.RMS_Error));
  31.         Positive'Read(Warch_File_Access,Warch.Arch(I).Network.Current_Epoch);
  32.         Boolean'Read(Warch_File_Access,Warch.Arch(I).Network.Reuse_Network);
  33.         Text_Io.Put("Network filename = " );
  34.         String'Read(Warch_File_Access, network);
  35.         Warch.Arch(I).Network.Network := Unbounded.To_Unbounded_String(Network(1..Fixed.Index_Non_Blank(Network, Ada.Strings.Backward)));
  36.         Text_Io.Put_Line(Unbounded.To_String(Warch.Arch(I).Network.Network));
  37.         delay 10.0;
  38.      end loop;
  39.      Ada.Streams.Stream_IO.Close(Warch_File);
  40.   end Load_warch;


 
Voilà, je poste ici, car je résous mes problèmes ici. Mais si vous souhaitez jeter un oeil...
Merci.


Message édité par Profil supprimé le 09-12-2009 à 15:15:49
Reply

Marsh Posté le 09-12-2009 à 15:14:29   

Reply

Marsh Posté le 09-12-2009 à 15:41:08    

Tiens, j'ouvre le fichier en écriture pour le chargement... Y a un truc à faire là.  :o

Reply

Marsh Posté le 09-12-2009 à 15:46:32    

Et j'ai oublié d'initialiser le tableau Arch.
Ca devrait rouler.

Reply

Sujets relatifs:

Leave a Replay

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