Differenze tra le versioni di "Attendere in un'applicazione 'a riga di comando' la pressione del tasto 'Invio'"

Da Gambas-it.org - Wikipedia.
 
(12 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per determinare in un'applicazione "''a riga di comando''" (quindi lanciata da Terminale) l'attesa della pressione del tasto ''Invio'', potranno essere utilizzate diverse modalità.
+
Per determinare in un'applicazione ''a riga di comando'' (quindi lanciata da Terminale) la semplice e <SPAN Stye="text-decoration:underline">sola</span> attesa della pressione del tasto ''Invio'', potrà essere utilizzato l'Evento "_Read()" della Classe ''[https://www.gambas-it.org/wiki/index.php/Uso_della_classe_Application#.Read.28.29 Application]''.
  
 
+
Modo mostriamo il seguente semplice esempio:
==Uso dell'evento ''Application_Read()''==
+
  Private bo As Boolean
Questa modalità è mostrata anche in [[Uso_della_classe_Application#Read.28.29|questa pagina della WIKI]], alla quale si rinvia, e si basa sulla sollevazione dell'evento ''_Read()'' della Classe ''Application''.
 
 
 
 
 
 
 
==Uso di un ciclo ''Do...Loop Until...''==
 
Questa modalità prevede un ciclo che continuerà sino a che una variabile di tipo stringa non assume un valore determinato dalla pressione del tasto ''Invio''.
 
 
 
All'interno del ciclo verrà posta l'istruzione ''Read'' per la lettura - a seconda dei casi - del flusso aperto.
 
 
 
 
 
 
 
===Uso di Input ed una variabile===
 
Questa modalità fa semplicemente uso di ''Input'' ed una variabile di tipo stringa:
 
  '''Public''' Sub Main()
 
 
   
 
   
  Dim s As String
+
Public Sub Main()
 
   
 
   
  Do
+
<FONT Color=gray>' ''Il ciclo continua, finché la variabile "bo" non sarà diventata "Vera":''</font>
    <FONT Color=#B22222>Input s</font>
+
  Repeat
  Loop Until s <> Null
+
    wait 0.01
 +
  Until bo
 
   
 
   
  Print "Tasto premuto !"
+
  Print "E' stato premuto il tasto 'Invio' !"
 
   
 
   
  '''End'''
+
  <FONT Color=gray>' ''Poiché si usa l'Evento "Application_Read()", per terminare il programma è necesario prevedere alla fine l'istruzione "Quit":''</font>
 
+
  Quit
 
   
 
   
===Uso della proprietà ''File.In''===
+
  End
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
 
 
   
 
   
  Do
+
Public Sub Application_Read() <FONT Color=gray>' ''Questo Evento sarà sollevato con la pressione del tasto "Invio"</font>
    <FONT Color=#B22222>Read #File.In, s, -256</font>
 
  Loop Until s <> Null
 
 
   
 
   
  Print "Tasto premuto !"
+
  bo = True
 
   
 
   
  '''End'''
+
  End
  
  
===Uso del file-device ''/dev/stdin''===
+
==Uso dell'istruzione Input==
Questa modalità fa uso del file-device ''/dev/stdin'' che dovrà essere aperto in lettura:
+
Volendo, si potrà usare anche l'istruzione ''Input''. Contestualmente si dovrà usare anche una variabile di tipo Stringa che servirà soltanto per consentire l'uso dell'istruzione ''Input''.
'''Public''' Sub Main()
 
 
  Dim fl As File
 
  Dim s As String
 
 
  fl = Open "<FONT Color=#B22222>/dev/stdin</font>" For Read
 
 
  Do
 
    <FONT Color=#B22222>Read #fl, s, -256</font>
 
  Loop Until s <> Null
 
 
  Print "Tasto premuto !"
 
 
'''End'''
 
  
 
+
Mostriamo un esempio pratico:
===Uso del file-device ''/dev/tty''===
+
  Public Sub Main()
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
 
   Dim s As String
 
   
 
   
  fl = Open "<FONT Color=#B22222>/dev/tty</font>" For Read
+
  <FONT Color=gray>' ''Il codice si arresta qui, sino a che non sarà premuto il tasto "Invio":''</font>
   
+
  Input s
  Do
 
    <FONT Color=#B22222>Read #fl, s, -256</font>
 
  Loop Until s <> Null
 
 
  Print "Tasto premuto !"
 
 
'''End'''
 
 
 
 
 
===Uso del 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 "<FONT Color=#B22222>/dev/pts/...</font>" For Read
 
 
  Do
 
    <FONT Color=#B22222>Read #fl, s, -256</font>
 
  Loop Until s <> Null
 
 
  Print "Tasto premuto !"
 
 
'''End'''
 
 
 
 
 
===Uso del 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 "<FONT Color=#B22222>/proc/self/fd/0</font>" For Read
 
 
  Do
 
    <FONT Color=#B22222>Read #fl, s, -256</font>
 
  Loop Until s <> Null
 
 
   
 
   
  Print "Tasto premuto !"
+
  Print "E' stato premuto il tasto 'Invio' !"
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 15:40, 20 nov 2023

Per determinare in un'applicazione a riga di comando (quindi lanciata da Terminale) la semplice e sola attesa della pressione del tasto Invio, potrà essere utilizzato l'Evento "_Read()" della Classe Application.

Modo mostriamo il seguente semplice esempio:

Private bo As Boolean

Public Sub Main()

' Il ciclo continua, finché la variabile "bo" non sarà diventata "Vera":
 Repeat
   wait 0.01
 Until bo

 Print "E' stato premuto il tasto 'Invio' !"

' Poiché si usa l'Evento "Application_Read()", per terminare il programma è necesario prevedere alla fine l'istruzione "Quit":
 Quit

End


Public Sub Application_Read() ' Questo Evento sarà sollevato con la pressione del tasto "Invio"

 bo = True

End


Uso dell'istruzione Input

Volendo, si potrà usare anche l'istruzione Input. Contestualmente si dovrà usare anche una variabile di tipo Stringa che servirà soltanto per consentire l'uso dell'istruzione Input.

Mostriamo un esempio pratico:

Public Sub Main()

 Dim s As String

' Il codice si arresta qui, sino a che non sarà premuto il tasto "Invio":
 Input s

 Print "E' stato premuto il tasto 'Invio' !"

End