Leggere e scrivere nello standard Output, nello standard Input e nello standard Error

Da Gambas-it.org - Wikipedia.

Per avere accesso al flusso di dati dello "standard Output ", dello "standard Input " e dello "standard Error " è possibile usare le Proprietà .Out, .In ed .Err della classe File.

Dalla documentazione apprendiamo quanto segue:

Ogni linea vista sullo "standard input" viene rimandata indietro prima sullo "standard output" e poi sullo "standard error".

Esempio:

Public Sub Main ()

Dim InputLine As String

'Esegue il ciclo fino alla fine del flusso del file standard di input
  While not Eof(File.In)

'Legge una riga dallo standard input.
  Line Input #File.In, inputLine
'Questa riga è la stessa di:
' Line Input inputLine

'Stampa sullo standard output.
  Print #File.Out, inputLine
'Questa riga è la stessa di:
' Print inputLine

'Stampa standard error
  Print #File.Err, inputLine

 Wend

End


Creare un'applicazione con una riga di comando ed inserire il codice precedente nel Modulo di avvio. Se si esegue questo esempio in IDE Gambas, l'applicazione sembra bloccarsi.
Se si immette del testo nella finestra della console IDE ogni riga sarà ripetuta due volte. Ma poiché l'applicazione non vede mai la fine del file per il flusso dello standard Input, è necessario interrompere il progetto.
Per avere una migliore idea di ciò che fa detto esempio, è opportuno creare un file eseguibile dal progetto. Supponiamo che noi chiamiamo questo eseguibile pipe.gambas.
Ora si deve aprire un terminale Linux e spostarsi nella directory in cui è stato salvato il file eseguibile.
Se si immette il comando: 
 ls -a | ./pipe.gambas 
si vedrà ogni riga del comando ls -a ripetuta due volte. Una volta dallo standard Output e una volta dallo standard Error.
Questa volta l'applicazione vedrà la fine del file dal flusso dello standard Input e termina in modo anomalo.
 
Ora si provi: 
 ls -a | ./pipe.gambas > files.txt  
qui si reindirizza il flusso standard Output in un file e si vedrà il flusso di uscita dello standard Error nella finestra del terminale.
Ora si dovrebbe avere un file nella directory con l'uscita del comando ls -a.


Vediamo, ora, questo altro semplice esempio. Creiamo due applicativi. Il primo lo chiameremo: "primo.gambas", ed il secondo: "secondo.gambas".

Il codice del programma "primo.gambas" sarà il seguente:

Public Sub Button1_Click()

  Shell "ls /tmp | /percorso/del/programma/secondo.gambas"

End


Il codice del programma "secondo.gambas" sarà il seguente:

Public Sub Form_Open()

 Dim s As String

 While Not Eof(File.In)
   Line Input #File.In, s
   TextEdit1.RichText = TextEdit1.RichText & s & "<BR>"
 Wend

End

Lanciando l'applicativo primo.gambas si aprirà automaticamente anche l'altro applicativo "secondo.gambas", e nella TextEdit di quest'ultimo verrà scritto il risultato del comando ls presente in "primo.gambas".