Differenze tra le versioni di "Passare dati in runtime ad un programma 'a linea di comando'"

Da Gambas-it.org - Wikipedia.
Riga 7: Riga 7:
 
===Utilizzare un ciclo===
 
===Utilizzare un ciclo===
 
Tale modalità prevede l'attivazione di un ciclo, dal quale si uscirà solo quando si sarà passato all'applicazione Gambas un dato-stringa formato da uno o più caratteri:
 
Tale modalità prevede l'attivazione di un ciclo, dal quale si uscirà solo quando si sarà passato all'applicazione Gambas un dato-stringa formato da uno o più caratteri:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim fl As File
 
   Dim fl As File
Riga 13: Riga 13:
 
   
 
   
 
  <FONT color=gray>' ''Esegue il ciclo, finché non sarà stato inviato al programma Gambas dal Terminale, ove esso è stato lanciato, uno o più caratteri tramite la tastiera:''</font>
 
  <FONT color=gray>' ''Esegue il ciclo, finché non sarà stato inviato al programma Gambas dal Terminale, ove esso è stato lanciato, uno o più caratteri tramite la tastiera:''</font>
  While IsNull(s)
+
  While IsNull(s)
 
 
  <FONT color=gray>' ''Intercetta quanto scritto nel Terminale, ove è stato lanciato il programma Gambas:''</font>
 
  <FONT color=gray>' ''Intercetta quanto scritto nel Terminale, ove è stato lanciato il programma Gambas:''</font>
    Line Input #File.In, s
+
    Line Input #File.In, s
 
 
  <FONT color=gray>' ''Ricevuto quanto scritto nel Terminale, lo mostra nuovamente con aggiunta di altro testo nel Terminale medesimo:''</font>
 
  <FONT color=gray>' ''Ricevuto quanto scritto nel Terminale, lo mostra nuovamente con aggiunta di altro testo nel Terminale medesimo:''</font>
    Print #File.Out, "I caratteri inviati sono: " & s
+
    Print #File.Out, "I caratteri inviati sono: " & s
 +
  Wend
 
    
 
    
  Wend
+
  End
 
 
  '''End'''
 
  
  
Riga 30: Riga 27:
  
 
Con il seguente codice l'applicazione ''a linea di comando'', lanciata in un Terminale, attende che siano immessi caratteri numerici per effettuare a scelta dell'utente una delle quattro operazioni fondamentali:
 
Con il seguente codice l'applicazione ''a linea di comando'', lanciata in un Terminale, attende che siano immessi caratteri numerici per effettuare a scelta dell'utente una delle quattro operazioni fondamentali:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Print "\n'i' + [Invio] per ottenere informazioni"
 
   Print "\n'i' + [Invio] per ottenere informazioni"
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
 
  <FONT color=gray>' ''Questo è un gestore di eventi: lo "stdin" è rediretto qui''</font>
 
  <FONT color=gray>' ''Questo è un gestore di eventi: lo "stdin" è rediretto qui''</font>
 
   
 
   
  '''Public''' Sub <FONT color=B22222>Application_Read()</font>
+
  Public Sub <FONT color=B22222>Application_Read()</font>
 
      
 
      
 
   Dim s As String
 
   Dim s As String
 
   Dim ss As String[]
 
   Dim ss As String[]
 
   
 
   
    Line Input #File.In, s
+
  Line Input #File.In, s
 
    If s = "i" Then
 
      Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
 
      Print "- intero*intero per moltiplicare i due interi;"
 
      Print "- intero+intero per l'addizione;"
 
      Print "- intero/intero per la divisione;"
 
      Print "- intero-intero per la sottrazione;"
 
      Print "- 'chiudi' per chiudere."
 
    Else
 
 
   
 
   
 +
  If s = "i" Then
 +
    Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
 +
    Print "- intero*intero per moltiplicare i due interi;"
 +
    Print "- intero+intero per l'addizione;"
 +
    Print "- intero/intero per la divisione;"
 +
    Print "- intero-intero per la sottrazione;"
 +
    Print "- 'chiudi' per chiudere."
 +
  Else
 
     If InStr(s, "*") Then
 
     If InStr(s, "*") Then
 
       ss = Split(s, "*")
 
       ss = Split(s, "*")
Riga 71: Riga 67:
 
       Print CLong(Val(ss[0]) - Val(ss[1]))
 
       Print CLong(Val(ss[0]) - Val(ss[1]))
 
     Endif
 
     Endif
   
 
 
     If s = "chiudi" Then
 
     If s = "chiudi" Then
 
       Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
 
       Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
Riga 77: Riga 72:
 
       Quit
 
       Quit
 
     Endif
 
     Endif
   
 
 
   Endif
 
   Endif
 
   
 
   
   
+
  End
'''End'''
 

Versione delle 17:50, 8 giu 2024

Come si sa, diversamente da un'applicazione grafica, in un programma a linea di comando non è possibile richiamare l'istruzione InputBox per immettere dati e passarli così al programma medesimo. E' possibile, però, in tal caso trovare una soluzione via codice per poter passare dati a questa applicazione a linea di comando, mentre essa sta funzionando.

Mostreremo in questa pagina almeno due modalità.


Utilizzare un ciclo

Tale modalità prevede l'attivazione di un ciclo, dal quale si uscirà solo quando si sarà passato all'applicazione Gambas un dato-stringa formato da uno o più caratteri:

Public Sub Main()

 Dim fl As File
 Dim s As String

' Esegue il ciclo, finché non sarà stato inviato al programma Gambas dal Terminale, ove esso è stato lanciato, uno o più caratteri tramite la tastiera:
 While IsNull(s)
' Intercetta quanto scritto nel Terminale, ove è stato lanciato il programma Gambas:
   Line Input #File.In, s
' Ricevuto quanto scritto nel Terminale, lo mostra nuovamente con aggiunta di altro testo nel Terminale medesimo:
   Print #File.Out, "I caratteri inviati sono: " & s
 Wend
 
End


Utilizzare l'evento Application_Read()

L'uso dell'evento _Read() della Classe Application consente di evitare che l'applicazione resti concentrata tutta nel ciclo, finché non riceve dati, come nella precedente modalità, e di effettuare così altre operazioni.

Con il seguente codice l'applicazione a linea di comando, lanciata in un Terminale, attende che siano immessi caratteri numerici per effettuare a scelta dell'utente una delle quattro operazioni fondamentali:

Public Sub Main()

 Print "\n'i' + [Invio] per ottenere informazioni"

End


' Questo è un gestore di eventi: lo "stdin" è rediretto qui

Public Sub Application_Read()
   
 Dim s As String
 Dim ss As String[]

 Line Input #File.In, s

 If s = "i" Then
   Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
   Print "- intero*intero per moltiplicare i due interi;" 
   Print "- intero+intero per l'addizione;" 
   Print "- intero/intero per la divisione;" 
   Print "- intero-intero per la sottrazione;" 
   Print "- 'chiudi' per chiudere."
 Else
   If InStr(s, "*") Then
     ss = Split(s, "*")
     Print CLong(Val(ss[0]) * Val(ss[1]))
   Endif
   If InStr(s, "+") Then
     ss = Split(s, "+")
     Print CLong(Val(ss[0]) + Val(ss[1]))
   Endif
   If InStr(s, "/") Then
     ss = Split(s, "/")
     Print CLong(Val(ss[0]) \ Val(ss[1]))
   Endif
   If InStr(s, "-") Then
     ss = Split(s, "-")
     Print CLong(Val(ss[0]) - Val(ss[1]))
   Endif
   If s = "chiudi" Then
     Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
     Sleep 2
     Quit
   Endif
 Endif

End