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