Differenze tra le versioni di "Peek"

Da Gambas-it.org - Wikipedia.
 
Riga 8: Riga 8:
  
 
Vediamo con un esempio pratico ciò che accade leggendo con la funzione''Read'' il contenuto di un array di tipo Byte[]:
 
Vediamo con un esempio pratico ciò che accade leggendo con la funzione''Read'' il contenuto di un array di tipo Byte[]:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim bb As Byte[]
 
   Dim bb As Byte[]
Riga 30: Riga 30:
 
   st.Close
 
   st.Close
 
    
 
    
  '''End'''
+
  End
 
L'uso della funzione ''Peek'', invece, non causa tale spostamento in avanti del puntatore interno al flusso di dati letto:
 
L'uso della funzione ''Peek'', invece, non causa tale spostamento in avanti del puntatore interno al flusso di dati letto:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim bb As Byte[]
 
   Dim bb As Byte[]
Riga 54: Riga 54:
 
   st.Close
 
   st.Close
 
    
 
    
  '''End'''
+
  End
 
Pertanto l'uso della funzione ''Peek'' evita che si debba utilizzare la funzione "''[http://gambaswiki.org/wiki/lang/seek?l=it Seek]''" (come invece è necessario con ''Read'') per tornare a leggere dal numero d'indice, precedente alla lettura, del flusso dei byte-dati.
 
Pertanto l'uso della funzione ''Peek'' evita che si debba utilizzare la funzione "''[http://gambaswiki.org/wiki/lang/seek?l=it Seek]''" (come invece è necessario con ''Read'') per tornare a leggere dal numero d'indice, precedente alla lettura, del flusso dei byte-dati.
  

Versione attuale delle 15:44, 10 giu 2024

La risorsa Peek consente di leggere da un flusso di dati (Stream o File), senza che il puntatore interno al flusso si sposti in avanti.

variabile = Peek #flusso[, numero_byte_letti]


Differenza con l'uso di Read

Come è noto, con la lettura di un flusso di dati mediante la funzione Read il puntatore interno al flusso medesimo si sposta di un numero di byte pari alla quantità di memoria occupata dal tipo di dati del valore letto.
Così, se si legge un valore di tipo Intero, il puntatore interno si sposterà in avanti nel flusso di 4 byte. [Nota 1]

Vediamo con un esempio pratico ciò che accade leggendo con la funzioneRead il contenuto di un array di tipo Byte[]:

Public Sub Main()
 
 Dim bb As Byte[]
 Dim st As Stream
 Dim s As String
 
 bb = Byte[].FromString("abcdefghilmnop\x00")
 
 st = Memory bb.Data For Read
 
' Legge i primi cinque dati-byte presenti nell'array: 
 Read #st, s, 5
' Mostra in rappresentazione caratteri-stringa i 5 byte letti. Essi sono: "abcde". 
 Print s
 
' Legge altri cinque dati-byte presenti nell'array: 
 Read #st, s, 5
' Mostra in rappresentazione caratteri-stringa gli altri 5 byte letti. Essi sono: "fghil". 
 Print s
 
 st.Close
  
End

L'uso della funzione Peek, invece, non causa tale spostamento in avanti del puntatore interno al flusso di dati letto:

Public Sub Main()
 
 Dim bb As Byte[]
 Dim st As Stream
 Dim s As String
 
 bb = Byte[].FromString("abcdefghilmnop\x00")
 
 st = Memory bb.Data For Read
 
' Legge i primi cinque dati-byte presenti nell'array: 
 s = Peek #st, 5
' Mostra in rappresentazione caratteri-stringa i 5 byte letti. Essi sono: "abcde". 
 Print s
 
' Legge altri cinque dati-byte presenti nell'array: 
 Read #st, s, 5
' Mostra in rappresentazione caratteri-stringa gli altri 5 byte letti. Essi sono nuovamente: "abcde". 
 Print s
 
 st.Close
  
End

Pertanto l'uso della funzione Peek evita che si debba utilizzare la funzione "Seek" (come invece è necessario con Read) per tornare a leggere dal numero d'indice, precedente alla lettura, del flusso dei byte-dati.


Note

[1] Vedere anche queste pagine:
- https://www.gambas-it.org/wiki/index.php?title=Leggere_un_file_con_READ
- http://gambaswiki.org/wiki/lang/type?l=it


Riferimenti