Differenze tra le versioni di "Indirizzare dati da un programma ad un altro e ad un Terminale"

Da Gambas-it.org - Wikipedia.
Riga 111: Riga 111:
 
   
 
   
 
  '''End'''
 
  '''End'''
Va sottolineato che, se il programma A scrive i dati nel programma B mediante ''Print'' o ''Write'', la stringa compare in ''console''.
+
Va sottolineato che, se il programma A scrive i dati nel programma B mediante ''Print'' o ''Write'', la stringa compare nella ''console'' del progetto B.
 
<BR>Se, invece, l'utente scrive manualmente in console un testo qualsiasi, e, avendo il cursore alla fine di tale testo, preme il relativo tasto ''Invio'' della tastiera, la riga di caratteri verrà intercettata dall' "osservatore" ''Watch'' del progetto B; e verrà quindi sollevato l'evento ''File_Read()''.
 
<BR>Se, invece, l'utente scrive manualmente in console un testo qualsiasi, e, avendo il cursore alla fine di tale testo, preme il relativo tasto ''Invio'' della tastiera, la riga di caratteri verrà intercettata dall' "osservatore" ''Watch'' del progetto B; e verrà quindi sollevato l'evento ''File_Read()''.

Versione delle 08:52, 16 feb 2013

Il caso in questione è quello in cui si inviano dati da un programma Gambas ad un altro programma Gambas e ad un Terminale.


Mostreremo due esempi.


1) Nel primo esempio, letti i dati da un file, vengono indirizzati contemporaneamente ad una finestra Terminale ed alla Console dell'IDE di Gambas. Per l'esempio seguente è necessario impostare anche il componente gb.desktop:

Private fl0 As File
Private fl1 As File
Private fl2 As File


Public Sub Form_Open()

' Viene aperto un Terminale:
  Desktop.OpenTerminal

End


Public Sub Button1_Click()

 fl0 = Open "percorso_file_di_cui_intercettare_i_dati" For Read Watch

' Viene aperto il file speciale (da individuarsi preliminarmente) che rappresenta la console dell'IDE di Gambas:
 fl1 = Open "/dev/pts/N1" For Write  ' ...o anche: Output

' Viene aperto il file speciale (da individuarsi preliminarmente) che rappresenta il Terminale aperto all'inizio:
 fl2 = Open "/dev/pts/N2" For Write  ' ...o anche: Output
 
End


Public Sub File_Read()

 Dim s As String

 ' Legge i dati dal file:
   Read #fl0, s, -256

' Ridirige i dati dalla console di Gambas all'altro programma:
   Output To #fl1
' Scrive nell'altro programma:
   Print s;      ' ...o anche: Write #fl1, s

 ' Quindi scrive nel programma:
    Print s;      ' ...o anche: Write #fl1, s

' Ridirige, inoltre, i dati anche al Terminale:
    Output To #fl2

' Scrive quindi anche in una "TextArea" del programma principale:
    TextArea1.Text = TextArea1.Text & s

End


2) In quest'altro esempio, molto simile al precedente, abbiamo due progetti Gambas, che per comodità chiameremo A e B. Il progetto A invia dati al progetto B.

Nel progetto A avremo il seguente codice:

Private fl As File


Public Sub Form_Open()

' Viene aperto il file speciale (da individuarsi preliminarmente) che rappresenta il progetto B:
  fl = Open "/dev/pts/B" For Output

End


Public Sub Button1_Click()

' Viene inviata la stringa di caratteri al file speciale che rappresenta il progetto B:
  Print #fl, "Testo qualsiasi"

End

Nel progetto B avremo, invece, il seguente codice:

Private fl As File


Public Sub Form_Open()

' Resta in attesa sino a quando non viene creato il file speciale
' (da individuarsi preliminarmente) che rappresenta il progetto A:
  Do
    Wait 0.01
  Loop Until Exist("/dev/pts/A")

' Poniamo sotto "osservazione" il file speciale che rappresenta il progetto A:
  fl = Open "/dev/pts/A" For Read Watch

' Può essere utilizzato anche "Process":
  pr = Shell "cat < /dev/pts/A" For Read Write As "pr"

End


Public Sub File_Read()

' Oppure, se si è utilizzato "Process":
Public Sub pr_Read()
  
 Dim s As String
 
  Read #fl, s, -256

  TextArea1.Text &= s

End

Va sottolineato che, se il programma A scrive i dati nel programma B mediante Print o Write, la stringa compare nella console del progetto B.
Se, invece, l'utente scrive manualmente in console un testo qualsiasi, e, avendo il cursore alla fine di tale testo, preme il relativo tasto Invio della tastiera, la riga di caratteri verrà intercettata dall' "osservatore" Watch del progetto B; e verrà quindi sollevato l'evento File_Read().