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