Differenze tra le versioni di "Watch"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 7: Riga 7:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   varFile = Open "<Font Color=gray>''/percorso/del/file''</font>" For Read <FONT color=#B22222>Watch</font>
+
   varFile = Open "<Font Color=darkgreen>''/percorso/del/file''</font>" For Read <FONT color=#B22222>Watch</font>
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub <FONT color=#B22222>File_Read()</font>
+
   
 +
Public Sub <FONT color=#B22222>File_Read()</font>
 
    
 
    
 
   Dim b As Byte
 
   Dim b As Byte
 
   
 
   
 
   While Not Eof(varFile) <Font Color=gray>' ''Fin tanto che non è giunto alla fine del file...''</font>
 
   While Not Eof(varFile) <Font Color=gray>' ''Fin tanto che non è giunto alla fine del file...''</font>
  <Font Color=gray>' ''...legge il file e carica un byte nella variabile "by"...''</font>
+
  <Font Color=gray>' ''...legge il file e carica un byte nella variabile "b"...''</font>
 
     Read #varFile, b
 
     Read #varFile, b
 
  <Font Color=gray>' ''...e lo mostra in console:''</font>
 
  <Font Color=gray>' ''...e lo mostra in console:''</font>
Riga 24: Riga 25:
 
   Wend
 
   Wend
 
    
 
    
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
   varFile.Close
 
   varFile.Close
 
   
 
   
  '''End'''
+
  End
  
  
 
==Lettura dei dati contemporaneamente da più file==
 
==Lettura dei dati contemporaneamente da più file==
Per la lettura contemporanea dei dati da più file aperti, sarà necessario coniugare l'apertura e l'osservazione del file tramite ''Open... For Read Watch'' con il Metodo "Object.Attach()" per gestire l'evento della ricezione dei dati Midi, associando l'oggetto file alla definizione dell'evento:
+
Per la lettura contemporanea dei dati da più file aperti, sarà necessario coniugare l'apertura e l'osservazione del file tramite ''Open... For Read Watch'' con il Metodo "Object.Attach()", associando l'Oggetto file alla definizione dell'Evento.
 +
 
 +
Vediamo un esempio pratico, per gestire l'Evento della ricezione dei dati Midi da un dispositivo Midi esterno mediante il file-device che si genera nella cartella "/dev":
 
  Private varFile1 As File
 
  Private varFile1 As File
 
  Private varFile2 As File
 
  Private varFile2 As File
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   varFile1 = Open "<Font Color=gray>''/percorso/del/primo/file''</font>" For Read Watch
+
   varFile1 = Open "<Font Color=darkgreen>''/percorso/del/primo/file-device-MIDI''</font>" For Read Watch
 
  <Font Color=gray>' ''Viene associato l'oggetto ''File'' alla denominazione del proprio evento:''</font>
 
  <Font Color=gray>' ''Viene associato l'oggetto ''File'' alla denominazione del proprio evento:''</font>
 
   <FONT color=#B22222>Object.Attach</font>(varFile1, FMain, "eventoMidi1")
 
   <FONT color=#B22222>Object.Attach</font>(varFile1, FMain, "eventoMidi1")
 
    
 
    
   varFile2 = Open "<Font Color=gray>''/percorso/del/secondo/file''</font>" For Read Watch
+
   varFile2 = Open "<Font Color=darkgreen>''/percorso/del/secondo/file-MIDI''</font>" For Read Watch
 
  <Font Color=gray>' ''Viene associato l'oggetto ''File'' alla denominazione del proprio evento:''</font>
 
  <Font Color=gray>' ''Viene associato l'oggetto ''File'' alla denominazione del proprio evento:''</font>
 
   <FONT color=#B22222>Object.Attach</font>(varFile2, FMain, "eventoMidi2")
 
   <FONT color=#B22222>Object.Attach</font>(varFile2, FMain, "eventoMidi2")
 
    
 
    
  '''End'''
+
  End
 +
 
   
 
   
 
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal primo file:''</font>  
 
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal primo file:''</font>  
  '''Public''' Sub eventoMidi1_Read()
+
  Public Sub eventoMidi1_Read()
 
    
 
    
 
   Dim b1 As Byte
 
   Dim b1 As Byte
Riga 60: Riga 65:
 
   Print b1
 
   Print b1
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
 
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file:''</font>
 
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file:''</font>
  '''Public''' Sub eventoMidi2_Read()
+
  Public Sub eventoMidi2_Read()
 
    
 
    
 
   Dim b2 As Byte
 
   Dim b2 As Byte
Riga 71: Riga 77:
 
   Print b2
 
   Print b2
 
   
 
   
  '''End'''
+
  End
 
oppure in modo analogo mediante ''Observer'':
 
oppure in modo analogo mediante ''Observer'':
 
  Private varFile1 As File
 
  Private varFile1 As File
Riga 77: Riga 83:
 
   
 
   
 
   
 
   
   '''Public''' Sub Form_Open()
+
   Public Sub Form_Open()
 
   
 
   
 
   Dim oss1 As Observer
 
   Dim oss1 As Observer
 
   Dim oss2 As Observer
 
   Dim oss2 As Observer
 
   
 
   
   varFile1 = Open "<Font Color=gray>''/percorso/del/primo/file''</font>" For Read Watch
+
   varFile1 = Open "<Font Color=darkgreen>''/percorso/del/primo/file-device-MIDI''</font>" For Read Watch
 
   
 
   
 
  <Font Color=gray>' ''Viene "osservato" l'oggetto ''File'' per l'evento:''</font>
 
  <Font Color=gray>' ''Viene "osservato" l'oggetto ''File'' per l'evento:''</font>
 
   oss1 = New <FONT color=#B22222>Observer</font>(varFile1) As "eventoMidi1"
 
   oss1 = New <FONT color=#B22222>Observer</font>(varFile1) As "eventoMidi1"
 
    
 
    
   varFile2 = Open "<Font Color=gray>''/percorso/del/secondo/file''</font>" For Read Watch
+
   varFile2 = Open "<Font Color=darkgreen>''/percorso/del/secondo/file-device-MIDI''</font>" For Read Watch
 
   
 
   
 
  <Font Color=gray>' ''Viene "osservato" l'oggetto ''File'' per l'evento:''</font>
 
  <Font Color=gray>' ''Viene "osservato" l'oggetto ''File'' per l'evento:''</font>
 
   oss2 = New <FONT color=#B22222>Observer</font>(varFile2) As "eventoMidi2"
 
   oss2 = New <FONT color=#B22222>Observer</font>(varFile2) As "eventoMidi2"
 
    
 
    
  '''End'''
+
  End
 
   
 
   
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal primo file:''</font>  
+
  '''Public''' Sub eventoMidi1_Read()
+
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal primo file-device:''</font>  
 +
  Public Sub eventoMidi1_Read()
 
    
 
    
 
   Dim b1 As Byte
 
   Dim b1 As Byte
Riga 103: Riga 110:
 
   Print b1
 
   Print b1
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file:''</font>
+
  <Font Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file-device:''</font>
  '''Public''' Sub eventoMidi2_Read()
+
  Public Sub eventoMidi2_Read()
 
    
 
    
 
   Dim b2 As Byte
 
   Dim b2 As Byte
Riga 114: Riga 122:
 
   Print b2
 
   Print b2
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 16:00, 10 giu 2024

Se con OPEN viene specificata la parola-chiave WATCH, allora il file viene così visto dall'interprete:

  • Se almeno un byte può essere letto dal file, allora l'evento "File_Read()" viene chiamato;
  • Se almeno un byte può essere scritto nel file, allora l'evento "File_Write()" viene chiamato.

Come esempio mostreremo il caso in cui viene aperto un file-device in lettura (For Read) e viene osservato specificando la parola-chiave Watch:

Private varFile As File


Public Sub Form_Open()

 varFile = Open "/percorso/del/file" For Read Watch

End


Public Sub File_Read()
 
 Dim b As Byte

 While Not Eof(varFile) ' Fin tanto che non è giunto alla fine del file...
' ...legge il file e carica un byte nella variabile "b"...
   Read #varFile, b
' ...e lo mostra in console:
   Print b
 Wend
 
End


Public Sub Button1_Click()

 varFile.Close

End


Lettura dei dati contemporaneamente da più file

Per la lettura contemporanea dei dati da più file aperti, sarà necessario coniugare l'apertura e l'osservazione del file tramite Open... For Read Watch con il Metodo "Object.Attach()", associando l'Oggetto file alla definizione dell'Evento.

Vediamo un esempio pratico, per gestire l'Evento della ricezione dei dati Midi da un dispositivo Midi esterno mediante il file-device che si genera nella cartella "/dev":

Private varFile1 As File
Private varFile2 As File


Public Sub Form_Open()

 varFile1 = Open "/percorso/del/primo/file-device-MIDI" For Read Watch
' Viene associato l'oggetto File alla denominazione del proprio evento:
 Object.Attach(varFile1, FMain, "eventoMidi1")
 
 varFile2 = Open "/percorso/del/secondo/file-MIDI" For Read Watch
' Viene associato l'oggetto File alla denominazione del proprio evento:
 Object.Attach(varFile2, FMain, "eventoMidi2")
 
End


' Vengono intercettati i dati provenienti dal primo file: 
Public Sub eventoMidi1_Read()
 
 Dim b1 As Byte
 
 Read #varFile, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub eventoMidi2_Read()
 
 Dim b2 As Byte
 
 Read #varFile2, b2

 Print b2

End

oppure in modo analogo mediante Observer:

Private varFile1 As File
Private varFile2 As File


 Public Sub Form_Open()

 Dim oss1 As Observer
 Dim oss2 As Observer

 varFile1 = Open "/percorso/del/primo/file-device-MIDI" For Read Watch

' Viene "osservato" l'oggetto File per l'evento:
 oss1 = New Observer(varFile1) As "eventoMidi1"
 
 varFile2 = Open "/percorso/del/secondo/file-device-MIDI" For Read Watch

' Viene "osservato" l'oggetto File per l'evento:
 oss2 = New Observer(varFile2) As "eventoMidi2"
 
End


' Vengono intercettati i dati provenienti dal primo file-device: 
Public Sub eventoMidi1_Read()
 
 Dim b1 As Byte
 
 Read #varFile1, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file-device:
Public Sub eventoMidi2_Read()
 
 Dim b2 As Byte
 
 Read #varFile2, b2

 Print b2

End