Intercettare la stringa di caratteri immessi dall'utente nella console o Terminale

Da Gambas-it.org - Wikipedia.

Il caso esposto in questa pagina prevede un codice, nel quale:

1) il processo viene temporaneamente arrestato sino a quando l'utente non preme il tasto "Invio";
2) durante la fermata del processo l'utente immette uno o più caratteri e li invia allo standard input premendo il tasto "Invio" della tastiera;
3) viene raccolto e mostrato in Terminale quanto appena inviato allo standard input.

Questi tre obiettivi possono essere raggiunti mediante diverse modalità.

Uso dell'istruzione "File.In.ReadLine()"

Questa modalità utilizza direttamente l'istruzione "File.In.ReadLine()".
Il Metodo ".ReadLine()" legge dal flusso una riga fino al carattere escape di "fine riga e a capo".

Esempio:

Public Sub Main()

 Dim s As String

' Legge una riga di dati dallo "stdin":
 s = File.In.ReadLine()

 Print s

End


Uso della funzione Input

Questa modalità prevede il semplice uso della funzione Input in varie possibilità che di seguito si espongono.

Con una variabile stringa

Questa modalità fa semplicemente uso di Input e di una variabile di tipo stringa:

Public Sub Main()

 Dim s As String
 
 Input s
   
 Print "Tasto premuto !", s

End


Con la Proprietà File.In

Questa modalità fa uso in modo diretto della proprietà File.In che ritorna lo standard input del flusso:

Public Sub Main()

 Dim s As String
  
 Input #File.In, s
  
 Print "Tasto premuto !", s

End


con il file-device /dev/stdin

Questa modalità fa uso del file-device /dev/stdin che dovrà essere aperto in lettura:

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/dev/stdin" For Read
  
 Input #fl, s
  
 fl.Close
   
 Print "Tasto premuto !", s
  
End


con il file-device /dev/tty

Questa modalità fa uso del file-device /dev/tty che dovrà essere aperto in lettura:

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/dev/tty" For Read

 Input #fl, s
      
 fl.Close
  
 Print "Tasto premuto !", s

End


con il file-device /dev/pts/...

Questa modalità fa uso del file-device /dev/pts/... specifico del Terminale nel quale è stata lanciata la nostra applicazione a riga di comando. Lo specifico file-device di tipo pts, è identificato con un numero che però andrà preventivamente individuato e dovrà essere aperto in lettura:

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/dev/pts/..." For Read

 Input #fl, s
          
 fl.Close
  
 Print "Tasto premuto !", s

End


Con il file /proc/self/fd/0

Questa modalità fa uso del file /proc/self/fd/0 che dovrà essere aperto in lettura:

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/proc/self/fd/0" For Read
  
 Input #fl, s
       
 fl.Close
  
 Print "Tasto premuto !", s

End