Differenze tra le versioni di "Leggere e scrivere in un vettore mediante i Memory Stream"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Per poter leggere i dati da un vettore e/o scrivere dati in un vettore mediante i ''[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]'', è necessario ottenere l'indirizzo di memoria del vettore medesimo. Tale risultato con i vettori si ottiene mediante la proprietà ''.Data'', la quale ritorna un ''Puntatore'' ai dati contenuti dal vettore.
+
Per poter leggere i dati da un vettore e/o scrivere dati in un vettore mediante i ''[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]'', è necessario ottenere l'indirizzo di memoria del vettore medesimo. Tale risultato con i vettori, così come anche con le matrici, si ottiene mediante la proprietà ''.Data'', la quale ritorna un ''Puntatore'' ai dati contenuti dal vettore.
  
  
 +
==Leggere e scrivere in un vettore==
 
Mostriamo dunque un esempio, nel quale si legge e si scrive in un vettore di tipo Byte[] mediante i ''[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]'' ed usando la proprietà ''.Data'' dei vettori:
 
Mostriamo dunque un esempio, nel quale si legge e si scrive in un vettore di tipo Byte[] mediante i ''[[Definizione_ed_uso_dei_Memory_Stream|Memory Stream]]'' ed usando la proprietà ''.Data'' dei vettori:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
Riga 127: Riga 128:
  
 
...e così via con gli altri tipi di variabili.
 
...e così via con gli altri tipi di variabili.
 +
 +
 +
 +
==Leggere e scrivere in una ''Matrice''==
 +
Nel caso di lettura o scrittura con una ''matrice'', dichiarata con la parola ''New''
 +
Dim matrice As New Byte[n, n]
 +
o sia incorporata
 +
Private matrice[n, n] As Byte
 +
i dati iniziano dall'indice zero seguendo l'ordine delle colonne.
 +
 +
Esempio:
 +
'''Public''' Sub Main()
 +
 +
  Dim bb As New Byte[3, 3]
 +
  Dim p, po As Pointer
 +
  Dim st As Stream
 +
  Dim j, b As Byte
 +
 +
  bb[0, 0] = 99
 +
  bb[0, 1] = 99
 +
  bb[0, 2] = 99
 +
 +
  bb[1, 0] = 111
 +
  bb[1, 1] = 111
 +
  bb[1, 2] = 111
 +
 +
  p = bb.data
 +
  st = Memory p For Read
 +
  For i = 0 To 15
 +
    Read #st, b
 +
    Print i, b
 +
  Next
 +
 +
  st.Close()
 +
 +
'''End'''

Versione delle 09:21, 10 nov 2014

Per poter leggere i dati da un vettore e/o scrivere dati in un vettore mediante i Memory Stream, è necessario ottenere l'indirizzo di memoria del vettore medesimo. Tale risultato con i vettori, così come anche con le matrici, si ottiene mediante la proprietà .Data, la quale ritorna un Puntatore ai dati contenuti dal vettore.


Leggere e scrivere in un vettore

Mostriamo dunque un esempio, nel quale si legge e si scrive in un vettore di tipo Byte[] mediante i Memory Stream ed usando la proprietà .Data dei vettori:

Public Sub Main()

 Dim v As Byte[] = [10, 20, 30, 40]
 Dim p As Pointer
 Dim st As Stream
 Dim b, j As Byte

  p = v.Data
   
  st = Memory p For Read Write
  
' Aggiungiamo (scriviamo) subito un valore alla fine del vettore:
  Seek #st, 4
' Scriviamo nel "Puntatore" mediante lo "Stream":
  Write #st, 99 As Byte
   
' Leggiamo nell'indirizzo di memoria del vettore: 
  For j = 0 To v.Count
    Seek #st, j
    Read #st, b
    Print b
  Next
 
' Sostituiamo (scriviamo) un valore nel 3° elemento del vettore:
  Seek #st, 2
  Write #st, 88 As Byte
   
' Leggiamo nell'indirizzo di memoria del vettore come definitivamente modificato: 
  For j = 0 To v.Count
    Seek #st, j
    Read #st, b
    Print b
  Next

  st.Close
 
End


Stesso esempio, ma con vettore di tipo Short[]

Ovviamente valori di tipo Short occupano ciascuno 2 byte, quindi:

Public Sub Main()

 Dim v As Short[] = [10, 20, 30, 40]
 Dim p As Pointer
 Dim st As Stream
 Dim j As Byte
 Dim sh As Short

  p = v.Data
   
  st = Memory p For Read Write
  
' Aggiungiamo (scriviamo) subito un valore alla fine del vettore:
  Seek #st,  4 * SizeOf(gb.Short)
' Scriviamo nel "Puntatore" mediante lo "Stream":
  Write #st, 99 As Byte
   
' Leggiamo nell'indirizzo di memoria del vettore: 
  For j = 0 To  v.Count * SizeOf(gb.Short) Step 2
    Seek #st, j
    Read #st, sh
    Print sh
  Next
 
' Sostituiamo (scriviamo) un valore nel 3° elemento del vettore:
  Seek #st, 2 * SizeOf(gb.Short)
  Write #st, 88 As Byte
   
' Leggiamo nell'indirizzo di memoria del vettore come definitivamente modificato: 
  For j = 0 To v.Count * SizeOf(gb.Short) Step 2
    Seek #st, j
    Read #st, sh
    Print sh
  Next

  st.Close
 
End


Stesso esempio, ma con vettore di tipo Integer[]

Ovviamente valori di tipo Integer occupano ciascuno 4 byte, quindi:

Public Sub Main()

 Dim v As Integer[] = [10, 20, 30, 40]
 Dim p As Pointer
 Dim st As Stream
 Dim j As Byte
 Dim i As Integer

  p = v.Data
   
  st = Memory p For Read Write
  
' Aggiungiamo (scriviamo) subito un valore alla fine del vettore:
  Seek #st, 4 * SizeOf(gb.Integer)
' Scriviamo nel "Puntatore" mediante lo "Stream":
  Write #st, 99 As Integer
   
' Leggiamo nell'indirizzo di memoria del vettore: 
  For j = 0 To  v.Count * SizeOf(gb.Integer) Step 4
    Seek #st, j
    Read #st, i
    Print i
  Next
 
' Sostituiamo (scriviamo) un valore nel 3° elemento del vettore:
  Seek #st, 2 * SizeOf(gb.Integer)
  Write #st, 88 As Integer
   
' Leggiamo nell'indirizzo di memoria del vettore come definitivamente modificato: 
  For j = 0 To v.Count * SizeOf(gb.Integer) Step 4
    Seek #st, j
    Read #st, i
    Print i
  Next

  st.Close
 
End


...e così via con gli altri tipi di variabili.


Leggere e scrivere in una Matrice

Nel caso di lettura o scrittura con una matrice, dichiarata con la parola New

Dim matrice As New Byte[n, n]

o sia incorporata

Private matrice[n, n] As Byte

i dati iniziano dall'indice zero seguendo l'ordine delle colonne.

Esempio:

Public Sub Main()

 Dim bb As New Byte[3, 3]
 Dim p, po As Pointer
 Dim st As Stream
 Dim j, b As Byte

  bb[0, 0] = 99
  bb[0, 1] = 99
  bb[0, 2] = 99

  bb[1, 0] = 111
  bb[1, 1] = 111
  bb[1, 2] = 111

  p = bb.data
  st = Memory p For Read
  For i = 0 To 15
    Read #st, b
    Print i, b
  Next

  st.Close()

End