Differenze tra le versioni di "Seek"

Da Gambas-it.org - Wikipedia.
Riga 41: Riga 41:
 
   Write #fl, 99 As Integer
 
   Write #fl, 99 As Integer
 
   
 
   
  <FONT color=gray>' ''Poiché le funzioni ''Write'' spostano, comunque, automaticamente il puntatore all'interno del flusso,''
+
  <FONT color=gray>' ''Poiché le funzioni "Write" spostano, comunque, automaticamente il puntatore all'interno del flusso,''
 
  ' ''per leggere qualsiasi dei due valori, bisognerà utilizzare la funzione ''Seek'' impostandone la posizione in modo preciso.''
 
  ' ''per leggere qualsiasi dei due valori, bisognerà utilizzare la funzione ''Seek'' impostandone la posizione in modo preciso.''
  ' ''Così, per leggere, ad esempio, il secondo valore scritto nel file, poiché il valore di tipo ''Integer'' occupa 4 byte,''
+
  ' ''Poiché il valore di tipo ''Integer'' occupa 4 byte, le due operazioni di scrittura con "Write" hanno prodotto''
  ' ''bisognerà spostare di 4 byte il puntatore in avanti; e quindi il valore sarà letto al byte di indice 4 (ossia al 5° byte) del file:''</font>
+
' ''anche lo spostamento di 8 byte complessivi in avanti del puntatore interno. Così, per leggere, ad esempio, il secondo valore (99) scritto nel file,''
 +
  ' ''bisognerà spostare il puntatore di 4 byte indietro; e quindi il valore sarà letto al byte di indice 4 (ossia al 5° byte) del file:''</font>
 
   <FONT color=#B22222>Seek #fl, 4</font>
 
   <FONT color=#B22222>Seek #fl, 4</font>
 
   
 
   

Versione delle 15:59, 11 feb 2015

Il comando Seek imposta la posizione del puntatore interno ad un flusso (stream), definito mediante una variabile di tipo File o di tipo Stream, per la successiva operazione di lettura (Read) o scrittura (Write) sul flusso medesimo.
Seek consente, pertanto, di leggere o di scrivere all'interno di un flusso di dati partendo dall'indice di un determinato byte.

La sua sintassi è:

Seek #Flusso, Posizione


Poiché l'indice interno di un flusso di dati ha inizio da zero, per posizionare il puntatore interno del flusso all'indice 0, ossia al primo byte, si dovrà impostare il valore di Posizione a zero:

Seek #flusso, 0

Se il valore della posizione è negativo, allora il puntatore interno allo stream sarà spostato ad un indice calcolato partendo dalla fine del flusso medesimo.

' Sposta il puntatore interno dello stream di dieci byte partendo dalla fine dello stream:
Seek #flusso, -10

Per impostare il puntatore dopo la fine del flusso di dati, è necessario usare la funzione Lof():

' Sposta il puntatore interno dello stream dopo la fine dello stream:
Seek #flusso, Lof(#flusso)


Conoscere la posizione attuale del puntatore interno del flusso di dati

Il comando Seek consente anche di conoscere la posizione attuale del puntatore all'interno del flusso di dati.

In tal caso la sua sintassi è:

Posizione = Seek(flusso)


Esempio pratico

Public Sub Main()

 Dim fl As File
 Dim i, f As Integer


  fl = Open "/percorso/del/file" For Read Write

  Write #fl, 9 As Integer

  Write #fl, 99 As Integer

' Poiché le funzioni "Write" spostano, comunque, automaticamente il puntatore all'interno del flusso,
' per leggere qualsiasi dei due valori, bisognerà utilizzare la funzione Seek impostandone la posizione in modo preciso.
' Poiché il valore di tipo Integer occupa 4 byte, le due operazioni di scrittura con "Write" hanno prodotto
' anche lo spostamento di 8 byte complessivi in avanti del puntatore interno. Così, per leggere, ad esempio, il secondo valore (99) scritto nel file,
' bisognerà spostare il puntatore di 4 byte indietro; e quindi il valore sarà letto al byte di indice 4 (ossia al 5° byte) del file:
  Seek #fl, 4

  Read #fl, i

  Print i


' Ora andiamo a vedere l'attuale posizione del puntatore interno del flusso,
' tenendo presente che anche la funzione Read sposta automaticamente il puntatore all'interno del flusso:
  f = seek(fl)

  Print f   ' Il risultato sarà 8

End