Differenze tra le versioni di "Leggere e scrivere in un vettore mediante i Memory Stream"
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.
Indice
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