Differenze tra le versioni di "Scrivere nello Standard Input di un Terminale con un programma Gambas 'a riga di comando'"

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
Vi possono essere due situazioni in cui sia possibile scrivere nello ''Standard Input'' di un Terminale con un programma Gambas "''a riga di comando''", che sia stato in quel Terminale lanciato:  quella in cui il processo di svolgimento di detto programma si pone in attesa dell'immissione dei dati nel Terminale da parte dell'utente (in questo caso si potranno utilizzare almeno cinque modalità), e quella in cui durante lo svolgimento del programma sia possibile (come nel caso frequente in cui il programma è all'interno di un ciclo) inviare al programma medesimo dei valori scrivendo nel Terminale e premendo il tasto "Invio" della tastiera. <SUP>&#91;[[#Note|Nota 1]]&#093;</sup>
+
Vi possono essere due situazioni in cui sia possibile scrivere nello ''Standard Input'' di un Terminale con un programma Gambas "''a riga di comando''", che sia stato in quel Terminale lanciato:  quella in cui il processo di svolgimento di detto programma si pone in attesa dell'immissione dei dati nel Terminale da parte dell'utente (in questo caso si potranno utilizzare almeno cinque modalità), e quella in cui durante lo svolgimento del programma sia possibile (come nel caso frequente in cui il programma è all'interno di un ciclo) inviare al programma medesimo dei valori scrivendo nel Terminale e premendo il tasto "Invio" della tastiera. <SUP>&#91;[[#Note|nota 1]]&#093;</sup>
  
Negli esempi a corredo si lancerà il programma Gambas ''a riga di comando'' dal Terminale. Se si intende raccogliere un valore ''numerico'', allora per la lettura è sufficiente utilizzare l'istruzione ''Input''. Se si intende, invece, raccogliere un valore di tipo "''Stringa''" formato da ''due o più'' caratteri separati da uno spazio, allora si dovrà ovviamente utilizzare l'istruzione ''Line Input''.  
+
Negli esempi a corredo si lancerà il programma Gambas ''a riga di comando'' dal Terminale. Se si intende raccogliere un valore ''numerico'', allora per la lettura è sufficiente utilizzare l'istruzione ''Input''. Se si intende, invece, raccogliere un valore di tipo ''Stringa'' formato da ''due o più'' caratteri separati da uno spazio, allora si dovrà ovviamente utilizzare l'istruzione "Line Input".  
  
  
Riga 7: Riga 7:
 
Le modalità, che vedremo di seguito, pongono il programma <SPAN Style="text-decoration:underline">in attesa</span> dell'immissione da parte dell'utente di uno o più caratteri. Il processo del programma si arresterà attendendo l'immissione di un valore (in questi casi) numerico e la pressione del tasto ''Invio''. Il programma Gambas raccoglierà il valore immesso nel Terminale e lo utilizzerà per una semplice moltiplicazione, il cui risultato sarà mostrato nel Terminale medesimo.
 
Le modalità, che vedremo di seguito, pongono il programma <SPAN Style="text-decoration:underline">in attesa</span> dell'immissione da parte dell'utente di uno o più caratteri. Il processo del programma si arresterà attendendo l'immissione di un valore (in questi casi) numerico e la pressione del tasto ''Invio''. Il programma Gambas raccoglierà il valore immesso nel Terminale e lo utilizzerà per una semplice moltiplicazione, il cui risultato sarà mostrato nel Terminale medesimo.
  
===con ''Input'' ed una variabile===
+
===con "Input" ed una variabile===
Questa è la modalità più semplice, la quale prevede l'istruzione ''Input'' seguita semplicemente da una variabile.
+
Questa è la modalità più semplice, la quale prevede l'istruzione "Input" seguita semplicemente da una variabile.
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 19: Riga 19:
 
   Print v * 10
 
   Print v * 10
 
   
 
   
  '''End'''
+
  End
  
  
===con la proprietà ''#File.In'' ed una variabile===
+
===con la Proprietà "#File.In" ed una variabile===
Quest'altra modalità prevede l'uso della proprietà ''.In'' della Classe ''File'' con il prefisso #, e seguita da una variabile.
+
Quest'altra modalità prevede l'uso della Proprietà ".In" della Classe ''File'' con il prefisso #, e seguita da una variabile.
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 34: Riga 34:
 
   Print v * 10
 
   Print v * 10
 
   
 
   
  '''End'''
+
  End
  
  
Riga 40: Riga 40:
 
Questa modalità prevede l'apertura in lettura del file-device ''/dev/stdin'' relativo al Terminale, ove è stato lanciato il programma Gambas.
 
Questa modalità prevede l'apertura in lettura del file-device ''/dev/stdin'' relativo al Terminale, ove è stato lanciato il programma Gambas.
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 53: Riga 53:
 
   fl.Close
 
   fl.Close
 
   
 
   
  '''End'''
+
  End
  
  
Riga 61: Riga 61:
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 75: Riga 75:
 
   fl.Close
 
   fl.Close
 
   
 
   
  '''End'''
+
  End
  
  
Riga 82: Riga 82:
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 94: Riga 94:
 
   fl.Close
 
   fl.Close
 
   
 
   
  '''End'''
+
  End
  
  
Riga 101: Riga 101:
  
 
Esempio:
 
Esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim v As Integer
 
   Dim v As Integer
Riga 114: Riga 114:
 
   fl.Close
 
   fl.Close
 
   
 
   
  '''End'''
+
  End
 
 
  
  
 
==Senza pausa nello scorrimento del codice==
 
==Senza pausa nello scorrimento del codice==
Se invece il programma prevede ad esempio un ciclo o altra procedura (<SPAN Style="text-decoration:underline">senza che vi sia così un arresto, una pausa nello scorrimento del codice</span> come nei casi precedenti) che offre all'utente la possibilità di inviare eventualmente un valore (magari per uscire dal ciclo medesimo), allora si utilizzerà l'evento ''_Read()'' della Classe ''Application''.
+
Se invece il programma prevede ad esempio un ciclo o altra procedura (<SPAN Style="text-decoration:underline">senza che vi sia così un arresto, una pausa nello scorrimento del codice</span> come nei casi precedenti) che offre all'utente la possibilità di inviare eventualmente un valore (magari per uscire dal ciclo medesimo), allora si utilizzerà l'Evento "_Read()" della Classe ''Application''.
  
 
Mostriamo un esempio:
 
Mostriamo un esempio:
Riga 125: Riga 124:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Repeat
 
   Repeat
Riga 135: Riga 134:
 
   Quit
 
   Quit
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub <FONT Color=#B22222>Application_Read()</font>
+
  Public Sub <FONT Color=#B22222>Application_Read()</font>
 
   
 
   
 
   Input s
 
   Input s
 
   
 
   
  '''End'''
+
  End
 
Oppure cliccando sul tasto "Invio" della tastiera:
 
Oppure cliccando sul tasto "Invio" della tastiera:
 
  Private bo as Boolean
 
  Private bo as Boolean
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Repeat
 
   Repeat
Riga 157: Riga 156:
 
   Quit
 
   Quit
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub <FONT Color=#B22222>Application_Read()</font>
+
  Public Sub <FONT Color=#B22222>Application_Read()</font>
 
   
 
   
 
   bo = True
 
   bo = True
 
   
 
   
  '''End'''
+
  End
  
  
  
 
=Note=
 
=Note=
[1] Vedere anche questa pagina: [[Intercettare_quanto_viene_scritto_manualmente_nella_console_o_in_un_Terminale|Intercettare quanto viene scritto manualmente nella console o in un Terminale]]
+
[1] Vedere anche questa pagina: [[Intercettare quanto viene scritto manualmente nella console o in un Terminale]]

Versione attuale delle 09:09, 7 gen 2024

Vi possono essere due situazioni in cui sia possibile scrivere nello Standard Input di un Terminale con un programma Gambas "a riga di comando", che sia stato in quel Terminale lanciato: quella in cui il processo di svolgimento di detto programma si pone in attesa dell'immissione dei dati nel Terminale da parte dell'utente (in questo caso si potranno utilizzare almeno cinque modalità), e quella in cui durante lo svolgimento del programma sia possibile (come nel caso frequente in cui il programma è all'interno di un ciclo) inviare al programma medesimo dei valori scrivendo nel Terminale e premendo il tasto "Invio" della tastiera. [nota 1]

Negli esempi a corredo si lancerà il programma Gambas a riga di comando dal Terminale. Se si intende raccogliere un valore numerico, allora per la lettura è sufficiente utilizzare l'istruzione Input. Se si intende, invece, raccogliere un valore di tipo Stringa formato da due o più caratteri separati da uno spazio, allora si dovrà ovviamente utilizzare l'istruzione "Line Input".


Con pausa nello scorrimento del codice

Le modalità, che vedremo di seguito, pongono il programma in attesa dell'immissione da parte dell'utente di uno o più caratteri. Il processo del programma si arresterà attendendo l'immissione di un valore (in questi casi) numerico e la pressione del tasto Invio. Il programma Gambas raccoglierà il valore immesso nel Terminale e lo utilizzerà per una semplice moltiplicazione, il cui risultato sarà mostrato nel Terminale medesimo.

con "Input" ed una variabile

Questa è la modalità più semplice, la quale prevede l'istruzione "Input" seguita semplicemente da una variabile.

Esempio:

Public Sub Main()

 Dim v As Integer

 Input v

 Print v * 10

End


con la Proprietà "#File.In" ed una variabile

Quest'altra modalità prevede l'uso della Proprietà ".In" della Classe File con il prefisso #, e seguita da una variabile.

Esempio:

Public Sub Main()

 Dim v As Integer

 Input #File.In, v

 Print v * 10

End


con l'apertura in lettura del file-device stdin del Terminale

Questa modalità prevede l'apertura in lettura del file-device /dev/stdin relativo al Terminale, ove è stato lanciato il programma Gambas. Esempio:

Public Sub Main()

 Dim v As Integer
 Dim fl As File

 fl = Open "/dev/stdin" For Read

 Input #fl, v

 Print v * 10

 fl.Close

End


con l'apertura in lettura del file speciale pts del Terminale

Questa modalità prevede l'apertura in lettura del file speciale pts relativo al Terminale, ove è stato lanciato il programma Gambas.

Esempio:

Public Sub Main()

 Dim v As Integer
 Dim fl As File

' Va individuato preventivamente il numero del file speciale "pts" relativo al Terminale, ove è stato lanciato il programma Gambas:
 fl = Open "/dev/pts/n" For Read

 Input #fl, v

 Print v * 10

 fl.Close

End


con l'apertura in lettura del file-descriptor del Terminale

Questa modalità prevede l'apertura in lettura del file-descriptor relativo al Terminale, ove è stato lanciato il programma Gambas.

Esempio:

Public Sub Main()

 Dim v As Integer
 Dim fl As File

' Va individuato preventivamente il numero del "processo" identificativo del Terminale, ove è stato lanciato il programma Gambas:
 fl = Open "/proc/numero del processo/fd/0" For Read

 Input #fl, v

 fl.Close

End


con l'apertura in lettura del file-device tty

Questa modalità prevede l'apertura in lettura del file-device tty, il quale rappresenta la console usata dal processo, relativo al Terminale ove è stato lanciato il programma Gambas:</font>

Esempio:

Public Sub Main()

 Dim v As Integer
 Dim fl As File

 fl = Open "/dev/tty" For Read

 Input #fl, v

 Print v * 10

 fl.Close

End


Senza pausa nello scorrimento del codice

Se invece il programma prevede ad esempio un ciclo o altra procedura (senza che vi sia così un arresto, una pausa nello scorrimento del codice come nei casi precedenti) che offre all'utente la possibilità di inviare eventualmente un valore (magari per uscire dal ciclo medesimo), allora si utilizzerà l'Evento "_Read()" della Classe Application.

Mostriamo un esempio:

Private s As String


Public Sub Main()

 Repeat
   Wait 0.01
 Until s <> Null

 Print "Uscito dal ciclo !"

 Quit

End


Public Sub Application_Read()

 Input s

End

Oppure cliccando sul tasto "Invio" della tastiera:

Private bo as Boolean


Public Sub Main()

 Repeat
   Wait 0.01
 Until bo

 Print "Uscito dal ciclo !"

 Quit

End


Public Sub Application_Read()

 bo = True

End


Note

[1] Vedere anche questa pagina: Intercettare quanto viene scritto manualmente nella console o in un Terminale