Differenze tra le versioni di "Porre sotto osservazione con Read Watch due o più file"

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Se si tenta di porre sotto osservazione con ''Read Watch'' due o più file, e si impostano le due sub-procedure di lettura ''File_Read()'' per ciascun file ''osservato'', viene sollevato un errore di coesistenza di più di una della predetta sub-procedura di lettura di file posti sotto ''osservazione''.
+
Se si tenta di porre sotto osservazione con ''Read Watch'' due o più file, e si impostano le due Eventi di lettura "File_Read()" per ciascun file ''osservato'', viene sollevato un errore di coesistenza di più di una della predetta sub-procedura di lettura di file posti sotto ''osservazione''.
  
Per ovviare a questo grosso problema, che impedisce di porre sotto osservazione con ''Read Watch'' due o più file, è necessario creare - per ciascun file che si intende porre sotto osservazione con le parole chiave ''Read Watch'' - una specifica Classe.
+
Per ovviare a questo grosso problema, che impedisce di porre sotto osservazione con ''Read Watch'' due o più file, sono possibili almeno tre soluzioni.
  
 +
===Uso di una ''Classe'' specifica aggiuntiva===
 +
La prima modalità prevede la creazione - per ciascun file che si intende porre sotto osservazione con le parole chiave ''Read Watch'' - di una specifica Classe aggiuntiva.
  
 
Nell'esempio astratto, che segue, porremo sotto osservazione due file-device.
 
Nell'esempio astratto, che segue, porremo sotto osservazione due file-device.
Riga 10: Riga 12:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
  <FONT Color=gray>' ''Invochiamo la sub-procedura della Classe secondaria per porre sotto osservazione il secondo file:''</font>
 
  <FONT Color=gray>' ''Invochiamo la sub-procedura della Classe secondaria per porre sotto osservazione il secondo file:''</font>
Riga 16: Riga 18:
 
   
 
   
 
  <FONT Color=gray>' ''Poniamo sotto osservazione il primo file:''</font>
 
  <FONT Color=gray>' ''Poniamo sotto osservazione il primo file:''</font>
   fl = Open "''/percorso/del/primo/file''" For Read Watch
+
   fl = Open "<FONT Color=gray>'''''/percorso/del/primo/file'''''</font>" For Read Watch
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub File_Read()
+
  Public Sub File_Read()
 
    
 
    
 
   Dim s As String
 
   Dim s As String
 
    
 
    
  Read #fl, s, -256
+
  Read #fl, s, -256
  Print s
+
 +
  Print s
 
    
 
    
  '''End'''
+
  End
 
 
 
 
 
Nella Classe secondaria specifica porremo sotto osservazione il secondo file:
 
Nella Classe secondaria specifica porremo sotto osservazione il secondo file:
 
  Private fl As File
 
  Private fl As File
 
   
 
   
 
   
 
   
  '''Public''' Procedure Osserva()
+
  Public Procedure Osserva()
 
    
 
    
   fl = Open "''/percorso/del/secondo/file''" For Read Watch
+
   fl = Open "<FONT Color=gray>''/percorso/del/secondo/file''</font>" For Read Watch
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub File_Read()
+
  Public Sub File_Read()
 
    
 
    
 
   Dim s As String
 
   Dim s As String
 
    
 
    
  Read #fl, s, -256
+
  Read #fl, s, -256
  Print s
+
 +
  Print s
 
    
 
    
  '''End'''
+
  End
 +
 
 +
 
 +
 
 +
===Uso del Metodo "Object.Attach()"===
 +
La seconda modalità prevede l'uso del Metodo ".Attach()" della Classe ''Object''.
 +
 
 +
Private fl1 As File
 +
Private fl2 As File
 +
 +
 +
Public Sub Main()
 +
 +
  fl1 = Open "<FONT Color=gray>''/percorso/del/primo/file''</font>" For Read Watch
 +
 +
<FONT Color=gray>' ''Viene associato il primo oggetto File alla denominazione del proprio evento:''</font>
 +
  Object.Attach(fl1, Me, "Eventofile1")
 +
 +
 +
  fl2 = Open "<FONT Color=gray>''/percorso/del/secondo/file''</font>" For Read Watch
 +
 +
<FONT Color=gray>' ''Viene associato il secondo oggetto File alla denominazione del proprio evento:''</font>
 +
  Object.Attach(fl2, Me, "Eventofile2")
 +
 +
End
 +
 +
 +
<FONT Color=gray>' ''Vengono intercettati i dati provenienti dal primo file:''</font>
 +
Public Sub Eventofile1_Read()
 +
 +
  Dim b1 As Byte
 +
 +
  Read #fl1, b1
 +
 +
  Print b1
 +
 +
End
 +
 +
 +
<FONT Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file:''</font>
 +
Public Sub Eventofile2_Read()
 +
 +
  Dim b2 As Byte
 +
 +
  Read #fl2, b2
 +
 +
  Print b2
 +
 +
End
 +
 
 +
 
 +
 
 +
===Uso della Classe ''Observer''===
 +
La terza modalità prevede l'uso della Classe ''Observer''.
 +
 
 +
Private fl1 As File
 +
Private fl2 As File
 +
 +
 +
Public Sub Main()
 +
 +
  Dim oss1 As Observer
 +
  Dim oss2 As Observer
 +
 +
  fl1 = Open "<FONT Color=gray>''/percorso/del/primo/file''</font>" For Read Watch
 +
 +
<FONT Color=gray>' ''Viene osservato il primo oggetto File per l'Evento:''</font>
 +
  oss1 = New Observer(fl1) As "Eventofile1"
 +
 +
 +
  fl2 = Open "<FONT Color=gray>''/percorso/del/secondo/file''</font>" For Read Watch
 +
 +
<FONT Color=gray>' ''Viene osservato il secondo oggetto File per l'Evento:''</font>
 +
  oss2 = New Observer(fl2) As "Eventofile2"
 +
 +
End
 +
 +
 +
<FONT Color=gray>' ''Vengono intercettati i dati provenienti dal primo file:''</font>
 +
Public Sub Eventofile1_Read()
 +
 +
  Dim b1 As Byte
 +
 +
  Read #fl1, b1
 +
 +
  Print b1
 +
 +
End
 +
 +
 +
<FONT Color=gray>' ''Vengono intercettati i dati provenienti dal secondo file:''</font>
 +
Public Sub Eventofile2_Read()
 +
 +
  Dim b2 As Byte
 +
 +
  Read #fl2, b2
 +
 +
  Print b2
 +
 +
End

Versione attuale delle 04:08, 14 ago 2023

Se si tenta di porre sotto osservazione con Read Watch due o più file, e si impostano le due Eventi di lettura "File_Read()" per ciascun file osservato, viene sollevato un errore di coesistenza di più di una della predetta sub-procedura di lettura di file posti sotto osservazione.

Per ovviare a questo grosso problema, che impedisce di porre sotto osservazione con Read Watch due o più file, sono possibili almeno tre soluzioni.

Uso di una Classe specifica aggiuntiva

La prima modalità prevede la creazione - per ciascun file che si intende porre sotto osservazione con le parole chiave Read Watch - di una specifica Classe aggiuntiva.

Nell'esempio astratto, che segue, porremo sotto osservazione due file-device.
Nella Classe principale porremo sotto osservazione un file:

Private fl As File
Public cl As New Class1


Public Sub Main()

' Invochiamo la sub-procedura della Classe secondaria per porre sotto osservazione il secondo file:
 cl.Osserva()

' Poniamo sotto osservazione il primo file:
 fl = Open "/percorso/del/primo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
 Read #fl, s, -256

 Print s
 
End

Nella Classe secondaria specifica porremo sotto osservazione il secondo file:

Private fl As File


Public Procedure Osserva()
 
 fl = Open "/percorso/del/secondo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
 Read #fl, s, -256

 Print s
 
End


Uso del Metodo "Object.Attach()"

La seconda modalità prevede l'uso del Metodo ".Attach()" della Classe Object.

Private fl1 As File
Private fl2 As File


Public Sub Main()

 fl1 = Open "/percorso/del/primo/file" For Read Watch

' Viene associato il primo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl1, Me, "Eventofile1")


 fl2 = Open "/percorso/del/secondo/file" For Read Watch

' Viene associato il secondo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl2, Me, "Eventofile2")

End


' Vengono intercettati i dati provenienti dal primo file:
Public Sub Eventofile1_Read()

 Dim b1 As Byte

 Read #fl1, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub Eventofile2_Read()

 Dim b2 As Byte

 Read #fl2, b2

 Print b2

End


Uso della Classe Observer

La terza modalità prevede l'uso della Classe Observer.

Private fl1 As File
Private fl2 As File


Public Sub Main()

 Dim oss1 As Observer
 Dim oss2 As Observer

 fl1 = Open "/percorso/del/primo/file" For Read Watch

' Viene osservato il primo oggetto File per l'Evento:
 oss1 = New Observer(fl1) As "Eventofile1"


 fl2 = Open "/percorso/del/secondo/file" For Read Watch

' Viene osservato il secondo oggetto File per l'Evento:
 oss2 = New Observer(fl2) As "Eventofile2"

End


' Vengono intercettati i dati provenienti dal primo file:
Public Sub Eventofile1_Read()

 Dim b1 As Byte

 Read #fl1, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub Eventofile2_Read()

 Dim b2 As Byte

 Read #fl2, b2

 Print b2

End