Re: Affectation avec Standard_Output.

Ludovic Brenta <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Bonjour Pascal,

Il me semble que c'est un de ces cas où l'on décrit la solution qui ne 
marche pas plutôt que le problème...  Par exemple, comme Standard_Output 
n'a pas de nom, il me semble que la définition du problème n'inclut 
*pas* de toujours associer un nom avec le fichier externe (et surtout 
pas un nom limité à 11 caractères...)   Donc le type Text tel que tu le 
définis ne répond pas au problème.  Si tu dissocies le nom du fichier de 
son File, le problème de l'affectation dans Rewrite disparaît de 
lui-même, non?

Personnellement je préconiserais l'utilisation des Streams de 
préférence à Ada.Text_IO.  Outre que les Streams sont cent fois plus 
rapides, un des avantages est que tu peux affecter à une variable de 
type Ada.Streams.Stream_IO.Stream_Access une valeur accès vers n'importe 
quel stream, même limité.  Tu peux utiliser 
Ada.Streams.Stream_IO.{Create,Open,Close} en lieu et place des 
sous-programmes de Ada.Text_IO.  D'autre part tu peux appeler 
Ada.Text_IO.Text_Streams (Ada.Text_IO.Standard_Output) pour obtenir un 
Stream vers Standard_Output.  La procédure Write que tu écris pourrait 
tout simplement être remplacée par String'Write (voir ARM 
13.13.2(12/2)).  Ton type Text pourrait très bien devenir:

type Text is limited record
    Optional_Name : Ada.Strings.Unbounded.Unbounded_String;
    Stream        : Ada.Streams.Stream_IO.Stream_Access;
    File          : Ada.Streams.Stream_IO.File_Type;
end record;

procedure Open (Name : in String; Result : out Text) is
begin
    if Name = "" then -- standard output
       Result.Stream := Ada.Text_IO.Text_Streams.Stream 
(Ada.Text_IO.Standard_Output);
    else -- named file
       Ada.Streams.Stream_IO.Open (File => Result.File,
                                   Mode => 
Ada.Streams.Stream_IO.Out_File,
                                   Name => Name);
       Result.Optional_Name := Ada.Strings.Unbounded.To_Unbounded_String 
(Name);
       Result.Stream        := Ada.Streams.Stream_IO.Stream (F));
    end if;
end Open;

procedure Write (T : in Text; Item : in String) is
begin
    String'Write (Stream => T.Stream, Item => Item);
end Write;

-- 
Ludovic Brenta.

_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.