Differenze tra le versioni di "Scrivere in un file i dati presenti in un vettore di tipo Byte"

Da Gambas-it.org - Wikipedia.
 
(16 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Se si intende scrivere in un file dati contenuti in una variabile vettoriale di tipo "Byte[]", sarà assolutamente necessario tenere conto del vettore.
 
Se si intende scrivere in un file dati contenuti in una variabile vettoriale di tipo "Byte[]", sarà assolutamente necessario tenere conto del vettore.
  
 +
==Uso del Metodo ".Write()" del vettore==
 +
In entrambi i casi si potrà utilizzare anche il Metodo "Write()" della variabile vettoriale di tipo Byte[].
  
===1°===
+
La sintassi è:
Nei seguenti casi:
+
vettore<FONT Color=#B22222>.<B>Write</b></font>( fl As Stream [ , Inizio As Integer, Lunghezza As Integer ] )
* vettore con numero di elementi non specificato;
+
laddove:
* vettore incorporato con numero di elementi specificato;
+
* "fl" è una variabile di tipo ''File'' o di tipo ''Stream'', nella quale scrivere i dati presenti nell'array "vettore";
sono possibili le seguenti due modalità di scrittura dei dati nel file.
+
* "Inizio" è il numero d'indice del byte del blocco di elementi (la cui quantità è indicata dal 3° argomento), da cui si parte per leggere i dati, contenuti nell'array, che saranno scritti nella variabile "fl";
 +
* "Lunghezza" è la quantità di valori-byte che si leggeranno dall'array "vettore", a partire dal byte di numero d'indice impostato nel 2° argomento, e che si scriveranno nella variabile "fl".
  
====Mediante ''Open... For Write''====
+
Mostriamo un esempio pratico:
I dati presenti in un vettore, al quale siano stati precedentemente incrementati in modo dinamico i propri elementi con assegnazione contemporanea di un valore, possono essere scritti in un file mediante la funzione "''Write''", ad esempio così:
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim vettore As New Byte[]
+
   Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
  Dim j As Byte
 
 
   Dim fl As File   
 
   Dim fl As File   
 
 
 
   
 
   
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
+
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
 +
 +
<FONT Color=gray>' ''Vengono letti i valori-byte dell'intera quantità di elementi del vettore e viene scritto il file:''</font>
 +
  vettore<FONT Color=#B22222>.Write</font>(fl, 0, vettore.Count)
 +
 +
  fl.Close
 
   
 
   
  For j = 0 To 3 
 
<FONT Color=gray>' ''Come esempio viene inserito il valore di "j" nell'elemento corrente della variabile vettoriale "vettore":''</font> 
 
    vettore[j] = j
 
 
 
<FONT Color=gray>' ''Viene scritto il file:''</font>
 
    <FONT Color=#B22222>Write</font> #fl, vettore[j] As Byte 
 
  Next 
 
 
 
  fl.Close
 
 
 
 
  '''End'''
 
  '''End'''
 
+
Va detto che il Metodo ".Write()" dell'array di tipo Byte[], posto in un ciclo di scrittura, <SPAN Style="text-decoration:underline">fa avanzare il puntatore agli elementi dell'array</span> di un numero di elementi pari a quello impostato nel 3° argomento. Pertanto al file verrà aggiunta una quantità (di numero pari a quello impostato nel 3° argomento) dei valori-byte successivi a quelli già appena precedentemente letti dal vettore e salvati nel file, a cominciare dal byte del blocco, letto e da salvare, avente numero d'indice indicato nel 2° parametro.
 
+
<BR>Così, se ad esempio, avendo il seguente ciclo:
Ugualmente possono essere scritti in un file i dati presenti in un vettore ''incorporato'' che ha, dunque, già dichiarato il numero degli elementi che lo compongono:
+
  Repeat
  Private vettore[4] As Byte
+
  vettore.Write(fl, <FONT Color=#B22222>2</font>, <FONT Color=#B22222>8</font>)
 +
  i += 8
 +
Until i == 24
 +
ad ogni un giro il puntatore interno all'array si sposta ulteriormente di due byte avanti nell'array e legge - a cominciare da lì - 8 byte successivi.
 +
 +
Mostriamo un esempio pratico:
 +
Public Sub Main()
 
   
 
   
 +
  Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88,
 +
                          &11, &22, &33, &44, &55, &66, &77, &88,
 +
                          &11, &22, &33, &44, &55, &66, &77, &88]
 +
  Dim fl As File 
 +
  Dim i As Integer
 
   
 
   
'''Public''' Sub Main()
+
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
 
   
 
   
   Dim j As Byte
+
   Repeat
  Dim fl As File 
+
<FONT Color=gray>' ''Ad ogni ciclo aggiunge i successivi 8 byte al file creato e sposta il puntatore interno del vettore di un numero di byte pari alla quantità impostata nel 3° parametro:''</font>
 
+
    vettore.Write(fl, 0, 8)
 +
    i += 8
 +
  Until i == 24
 
   
 
   
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
+
  fl.Close
 
   
 
   
  For j = 0 To 3  
+
  End
<FONT Color=gray>' ''Come esempio viene inserito il valore di "j" nell'elemento corrente della variabile vettoriale "vettore":''</font>
 
    vettore[j] = j
 
 
 
<FONT Color=gray>' ''Viene scritto il file:''</font> 
 
    <FONT Color=#B22222>Write</font> #fl, vettore[j] As Byte 
 
  Next 
 
 
 
  fl.Close
 
 
 
'''End'''
 
  
  
====Mediante il metodo ".Write()" del vettore====
+
==Uso del Metodo ".ToString()" del vettore e del Metodo ".Save()" della Classe ''File''==
In entrambi i casi si potrà utilizzare anche il metodo ''Write()'' della variabile vettoriale di tipo Byte[]:
+
Per riempire un file già esistente e vuoto si potrà fare uso in modo semplice e breve del Metodo ".ToString()" del vettore e del Metodo ".Save()" della Classe ''File''.
 +
<BR>Esempio:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim vettore As New Byte[]
+
   Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
  Dim j As Byte
 
  Dim fl As File 
 
 
 
 
   
 
   
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
+
  <FONT Color=#B22222>File.Save</font>("<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>, vettore<FONT Color=#B22222>.ToString</font>(0, vettore.Count))
 
   
 
   
  For j = 0 To 3 
 
<FONT Color=gray>' ''Come esempio viene inserito il valore di "j" nell'elemento corrente della variabile vettoriale "vettore":''</font> 
 
    vettore[j] = j
 
  Next
 
 
<FONT Color=gray>' ''Viene scritto il file:''</font> 
 
  vettore<FONT Color=#B22222>.Write(fl, 0, vettore.Count)</font>
 
 
 
  fl.Close
 
 
 
 
  '''End'''
 
  '''End'''
  
  
Private vettore[4] As Byte
+
==Mediante le istruzioni "Open e "Write"==
+
Mostriamo un esempio che fa uso dell'istruzione "Write" per scrivere in un file i dati presenti in un vettore di tipo "Byte[]":
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim j As Byte
+
   Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
 +
  Dim b As Byte
 
   Dim fl As File   
 
   Dim fl As File   
 
    
 
    
 +
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
 
   
 
   
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
+
  For b = 0 To vettore.Max
 +
<FONT Color=gray>' ''Viene scritto il file:''</font>
 +
    <FONT Color=#B22222>Write</font> #fl, vettore[b] As Byte 
 +
  Next
 
   
 
   
  For j = 0 To 3 
+
   fl.Close
<FONT Color=gray>' ''Come esempio viene inserito il valore di "j" nell'elemento corrente della variabile vettoriale "vettore":''</font> 
 
    vettore[j] = j
 
  Next
 
    
 
<FONT Color=gray>' ''Viene scritto il file:''</font> 
 
  vettore<FONT Color=#B22222>.Write(fl, 0, vettore.Count)</font>
 
 
 
  fl.Close
 
 
    
 
    
 
  '''End'''
 
  '''End'''
  
 
+
===Passare i dati del vettore mediante la sua Proprietà ".Data"===
 
+
Si potrà impostare quale 2° membro della riga di comando dell'istruzione "Write" la Proprietà ".Data" del vettore, avendo altresì cura di impostare il 3° membro della riga di comando, quale numero di byte da scrivere nel file.
======
+
<BR>Esempio:
Nei casi, invece, di:
+
  '''Public''' Sub Main()
* vettore ordinario con numero di elementi già dichiarati;
 
* vettore con assegnazione esplicita di valori a ciascun elemento;
 
sarà necessario utilizzare esclusivamente il metodo ''Write()'' della variabile vettoriale di tipo Byte[]:
 
'''Public''' Sub Main()
 
 
   
 
   
   Dim fl As File
+
  Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
   Dim vettore As Byte[4]
+
   Dim fl As File
 +
 
 +
   fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
 
   
 
   
 +
  Write #fl, <FONT Color=#B22222>vettore.Data, vettore.Count</font>
 
   
 
   
  fl = Open "''/percorso/del/file/da/scrivere''" For Create
+
  fl.Close
 
   
 
   
  For j = 0 To 3 
 
<FONT Color=gray>' ''Come esempio viene inserito il valore di "j" nell'elemento corrente della variabile vettoriale "vettore":''</font> 
 
    vettore[j] = j
 
  Next
 
 
<FONT Color=gray>' ''Viene scritto il file:''</font> 
 
  vettore<FONT Color=#B22222>.Write(fl, 0, vettore.Count)</font>
 
 
 
  fl.Close
 
 
 
 
  '''End'''
 
  '''End'''
  
 +
===Caso in cui si dichiarasse quale "Array" o quale "Byte[]" il tipo di dati del secondo membro della riga di istruzione con "Write"===
 +
Da rilevare che, se dopo il secondo membro dell'istruzione "Write" si dichiarasse il tipo di dati come "Array" oppure come "Byte[]", potremmo notare nei primi tre byte del file scritto i valori 41 02 04 ...., i quali stanno a rappresentare:
 +
41 è l'Array (il carattere 'A' sta appunto per Array).
 +
02 significa Byte.
 +
08 è il numero della dimensione del vettore (in questo esempio = 8).
 +
e solo dopo tali tre valori seguono i veri byte del contenuto del vettore.
  
 +
Esempio:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
  Dim fl As File
+
   Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
   Dim vettore As Byte[] = [11, 22, 33, 44]
+
  Dim fl As File 
 +
 
 +
  fl = Open "<FONT Color=gray>''/percorso/del/file/da/scrivere''</font>" For Create
 
   
 
   
 +
  Write #fl, vettore As <FONT Color=#B22222>Array</font>  <FONT Color=gray>' ''...oppure:'' '''As Byte[]'''</font>
 
   
 
   
  fl = Open "''/percorso/del/file/da/scrivere''" For Create
+
  fl.Close
 
    vettore<FONT color=#B22222>.Write(</font>fl, 0, vettore.Count<FONT color=#B22222>)</font>
 
 
  fl.Close
 
 
   
 
   
 
  '''End'''
 
  '''End'''
 
 
Se riguardo al 2° gruppo di casi si adoperasse l'istruzione "''Open... For Write''", potremmo notare nei primi tre byte del file scritto i valori ''41 02 04 ....'', i quali stanno a rappresentare:
 
41 è l'Array (il carattere 'A' sta appunto per Array).
 
02 significa Byte.
 
04 è il numero della dimensione dell'Array.
 
e dopo tali tre valori seguono i byte veri e propri del contenuto del vettore.
 

Versione attuale delle 17:46, 19 mag 2023

Se si intende scrivere in un file dati contenuti in una variabile vettoriale di tipo "Byte[]", sarà assolutamente necessario tenere conto del vettore.

Uso del Metodo ".Write()" del vettore

In entrambi i casi si potrà utilizzare anche il Metodo "Write()" della variabile vettoriale di tipo Byte[].

La sintassi è:

vettore.Write( fl As Stream [ , Inizio As Integer, Lunghezza As Integer ] )

laddove:

  • "fl" è una variabile di tipo File o di tipo Stream, nella quale scrivere i dati presenti nell'array "vettore";
  • "Inizio" è il numero d'indice del byte del blocco di elementi (la cui quantità è indicata dal 3° argomento), da cui si parte per leggere i dati, contenuti nell'array, che saranno scritti nella variabile "fl";
  • "Lunghezza" è la quantità di valori-byte che si leggeranno dall'array "vettore", a partire dal byte di numero d'indice impostato nel 2° argomento, e che si scriveranno nella variabile "fl".

Mostriamo un esempio pratico:

Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
 Dim fl As File  

 fl = Open "/percorso/del/file/da/scrivere" For Create

' Vengono letti i valori-byte dell'intera quantità di elementi del vettore e viene scritto il file:
 vettore.Write(fl, 0, vettore.Count)

 fl.Close

End

Va detto che il Metodo ".Write()" dell'array di tipo Byte[], posto in un ciclo di scrittura, fa avanzare il puntatore agli elementi dell'array di un numero di elementi pari a quello impostato nel 3° argomento. Pertanto al file verrà aggiunta una quantità (di numero pari a quello impostato nel 3° argomento) dei valori-byte successivi a quelli già appena precedentemente letti dal vettore e salvati nel file, a cominciare dal byte del blocco, letto e da salvare, avente numero d'indice indicato nel 2° parametro.
Così, se ad esempio, avendo il seguente ciclo:

Repeat
  vettore.Write(fl, 2, 8)
  i += 8
Until i == 24

ad ogni un giro il puntatore interno all'array si sposta ulteriormente di due byte avanti nell'array e legge - a cominciare da lì - 8 byte successivi.

Mostriamo un esempio pratico:

Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88, 
                          &11, &22, &33, &44, &55, &66, &77, &88,
                          &11, &22, &33, &44, &55, &66, &77, &88]
 Dim fl As File  
 Dim i As Integer

 fl = Open "/percorso/del/file/da/scrivere" For Create

 Repeat
' Ad ogni ciclo aggiunge i successivi 8 byte al file creato e sposta il puntatore interno del vettore di un numero di byte pari alla quantità impostata nel 3° parametro:
   vettore.Write(fl, 0, 8)
   i += 8
 Until i == 24

 fl.Close

End


Uso del Metodo ".ToString()" del vettore e del Metodo ".Save()" della Classe File

Per riempire un file già esistente e vuoto si potrà fare uso in modo semplice e breve del Metodo ".ToString()" del vettore e del Metodo ".Save()" della Classe File.
Esempio:

Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]

 File.Save("/percorso/del/file/da/scrivere, vettore.ToString(0, vettore.Count))

End


Mediante le istruzioni "Open e "Write"

Mostriamo un esempio che fa uso dell'istruzione "Write" per scrivere in un file i dati presenti in un vettore di tipo "Byte[]":

Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
 Dim b As Byte
 Dim fl As File  
  
 fl = Open "/percorso/del/file/da/scrivere" For Create

 For b = 0 To vettore.Max
' Viene scritto il file:
   Write #fl, vettore[b] As Byte  
 Next

 fl.Close
 
End

Passare i dati del vettore mediante la sua Proprietà ".Data"

Si potrà impostare quale 2° membro della riga di comando dell'istruzione "Write" la Proprietà ".Data" del vettore, avendo altresì cura di impostare il 3° membro della riga di comando, quale numero di byte da scrivere nel file.
Esempio:

 Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
 Dim fl As File  
  
 fl = Open "/percorso/del/file/da/scrivere" For Create

 Write #fl, vettore.Data, vettore.Count

 fl.Close

End

Caso in cui si dichiarasse quale "Array" o quale "Byte[]" il tipo di dati del secondo membro della riga di istruzione con "Write"

Da rilevare che, se dopo il secondo membro dell'istruzione "Write" si dichiarasse il tipo di dati come "Array" oppure come "Byte[]", potremmo notare nei primi tre byte del file scritto i valori 41 02 04 ...., i quali stanno a rappresentare:

41 è l'Array (il carattere 'A' sta appunto per Array).
02 significa Byte.
08 è il numero della dimensione del vettore (in questo esempio = 8).

e solo dopo tali tre valori seguono i veri byte del contenuto del vettore.

Esempio:

Public Sub Main()

 Dim vettore As Byte[] = [&11, &22, &33, &44, &55, &66, &77, &88]
 Dim fl As File  
  
 fl = Open "/percorso/del/file/da/scrivere" For Create

 Write #fl, vettore As Array   ' ...oppure: As Byte[]

 fl.Close

End