Re: Affectation avec Standard_Output.

Pascal <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Merci beaucoup Ludovic, ça correspond bien à mon idée de départ sinon j'aurais dû faire la sélection dans chaque routine d'entrée / sortie :-(
J'essaye...

A+, Pascal.
http://blady.pagesperso-orange.fr


Le 17 sept. 2011 à 14:38, Ludovic Brenta a écrit :

> Pascal <[email protected]> writes:
>> Merci Ludovic pour ta solution.  Je ne suis pas familier des Streams
>> vu que Text_IO me suffisait jusque là.
>> 
>> Le problème : en fait suivant la nature du fichier de type Text, Write
>> va écrire sur stdout, un fichier disque ou une fenêtre avec
>> GTK.TextView.  Le nom me permet de faire l'aiguillage.
> 
> Pour écrire dans un GTK.Text_View il faut écrire dans le
> Gtk.Text_Buffer, qui n'a aucun lien avec un quelconque File ni avec
> Ada.Text_IO.  En fait, tu ne peux pas associer un File avec un
> Gtk.Text_Buffer.  En revanche tu peux associer un Stream avec un
> Gtk.Text_Buffer.  L'aiguillage se fait par dynamic dispatching et ne
> peut pas se faire par le nom, puisque ni Standard_Output ni le
> Text_Buffer n'ont de nom.
> 

<..>

> Et maintenant tout devient facile.  Tu crées un Stream_Access de l'une
> des trois façons suivantes:
> 
> Stream_Access := Ada.Text_IO.Text_Streams.Stream (Ada.Text_IO.Current_Output); 
> 
> Stream := File_Stream.Open (File_Name => "toto.txt");
> Stream_Access := Stream'Access;
> 
> Stream := Buffer_Stream.Open (Buffer => My_Text_Buffer);
> Stream_Access := Stream'Access;
> 
> puis tu écris dedans très simplement avec:
> 
> String'Write (Stream_Access, Item => "coucou"); -- dynamic dispatch!
> 
>> Qqs questions : Conserver le champ File est-il utile (pas utilisé dans
>> Write) ?
> 
> Il est absolument nécessaire que le File existe au moins aussi longtemps
> qu'il existe un Stream vers lui (ARM A.12.1(36.1/1)).
> 
>> Donc le type record doit-il alors rester limited ?
> 
> Oui, s'il contient un File.  D'ailleurs, comme
> Ada.Streams.Root_Stream_Type est lui-même limité, tous les types de ma
> solution le sont aussi implicitement.
> 
>> Comment se fait la gestion des lignes Put_Line, New_Line,
>> Get_Line... ?
> 
> Elle ne se fait pas : c'est précisément ce qui rend les Streams cent
> fois plus rapides que Ada.Text_IO.  Tu lis et écris des ASCII.LF aux
> bons endroits.  Note que les Streams ne sont pas limités au texte; tu
> peux écrire absolument n'importe quoi dedans, d'ailleurs Gtk.Text_Buffer
> accepte même les images.
> 
> -- 
> 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

_______________________________________________
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.