Differenze tra le versioni di "Cercare un valore all'interno di un file aperto come un flusso di dati di tipo File"

Da Gambas-it.org - Wikipedia.
 
Riga 2: Riga 2:
  
 
Mostriamo un possibile esempio in cui si cerca all'interno del flusso di dati di tipo "File" un valore formato da 4 byte (Tipo ''Integer'' ).
 
Mostriamo un possibile esempio in cui si cerca all'interno del flusso di dati di tipo "File" un valore formato da 4 byte (Tipo ''Integer'' ).
<BR>Nelle due Costanti utilizzate vanno inseriti:
 
<BR> - il valore numerico da cercare
 
<BR> - il primo byte a sinistra del valore da cercare (pertanto se - ad esempio - il valore da cercare, <SPAN Style="text-decoration:underline">come memorizzato in little-endian nel file</span>, è: "04 03 02 01", a questa seconda Costante andrà assegnato il valore byte 04).
 
 
  Private Const VALORE As Integer = <FONT Color=gray>''valore-numerico-da-cercare'' (che occupi 4 byte)</font>
 
  Private Const VALORE As Integer = <FONT Color=gray>''valore-numerico-da-cercare'' (che occupi 4 byte)</font>
Private Const PRIMOBYTE As Byte = <FONT Color=gray>''il-primo-byte-a sinistra-del-valore-numerico-da-cercare''</font>
 
 
   
 
   
 
   
 
   
Riga 12: Riga 8:
 
   
 
   
 
   Dim fl As File
 
   Dim fl As File
  Dim b As Byte
 
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
 
   fl = Open "<FONT Color=gray>''/percorso/del/file/da/aprire''</font>" For Read  
 
   fl = Open "<FONT Color=gray>''/percorso/del/file/da/aprire''</font>" For Read  
 
   
 
   
   Do
+
   Repeat
     Read #fl, b
+
     Read #fl, i
     If b == PRIMOBYTE Then
+
     If i == VALORE Then  
      Seek #fl, Seek(fl) - 1
+
      Print "Il valore è stato trovato al byte di indice: ", Seek(fl) - SizeOf(gb.Integer)
      Read #fl, i
+
       fl.Close
      If i == VALORE Then  
+
       Quit
        Print "Il valore è stato trovato al byte di indice: ", Seek(fl) - SizeOf(gb.Integer)
 
        Break
 
       Endif
 
       Seek #fl, Seek(fl) - (SizeOf(gb.Integer) - 1)
 
 
     Endif
 
     Endif
   Loop
+
    Seek #fl, Seek(fl) - (SizeOf(gb.Integer) - 1)
 +
   Until Seek(fl) == Lof(fl) - (SizeOf(gb.Integer) - 1)
 
   
 
   
   If Seek(fl) = Lof(fl) - 1 Then Print "Valore non presente nel file."
+
   Print "Valore non presente nel file."
 
   
 
   
 
   fl.Close
 
   fl.Close
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 20:30, 22 nov 2021

Il caso è quello in cui, avendo aperto un file in "Lettura" come tipo di dati "File" con l'istruzione "Open", si intende cercare un valore costituito da uno o anche più byte.

Mostriamo un possibile esempio in cui si cerca all'interno del flusso di dati di tipo "File" un valore formato da 4 byte (Tipo Integer ).

Private Const VALORE As Integer = valore-numerico-da-cercare (che occupi 4 byte)


Public Sub Main()

 Dim fl As File
 Dim i As Integer
 
 fl = Open "/percorso/del/file/da/aprire" For Read 

 Repeat 
   Read #fl, i
   If i == VALORE Then 
     Print "Il valore è stato trovato al byte di indice: ", Seek(fl) - SizeOf(gb.Integer)
     fl.Close
     Quit 
   Endif
   Seek #fl, Seek(fl) - (SizeOf(gb.Integer) - 1)
 Until Seek(fl) == Lof(fl) - (SizeOf(gb.Integer) - 1)

 Print "Valore non presente nel file."

 fl.Close

End