Oppure

Loading
31/07/10 9:36
enzolone
Salve,
Ho esigenza di utilizzare una matrice dinamica e una volta inseriti i valori
memorizzarli con un unica PUT.
Ho scritto il seguente codice ma arrivo ad un elemento per volta.
Qualcuno mi puo' aiutare? Grazie



'--------------------a livello di modulo
Public Type matrice
elem As Integer
End Type

'-------------------------routine
sub command1_click()
Dim vettore(100) As matrice
Open "C:\prova" For Random As #1 Len = 2
For I = 1 To 100
vettore(I).elem = I
Put #1, I, vettore(I).elem
Next I
Close
end sub
aaa
01/08/10 9:09
nessuno
Esattamente cosa vuoi fare?

Perché vedo che usi una struttura in cui c'è un solo elemento intero e poi utilizzi un vettore di 100 strutture ... sarebbe più logico usare un vettore di 100 Integer.

Ma devi chiarire un po' ... (anche perché non vedo la "matrice dinamica" di cui parli ... ne hai allocato una staticamente non certo dinamicamente).
Ultima modifica effettuata da nessuno 01/08/10 9:12
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/08/10 9:41
enzolone
sorry, sono stato molto poco chiaro
il mio obiettivo sarebbe quello di scrivere un codice di questo
tipo: (anche se non riesco a trovare il modo)

'modulo
public type matrice
vettore() as integer
end type


'sub
I=K 'K varia in funzione di un n elementi che derivano da un calcolo di una
'immagine bitmap

redim vettore(I) 'dovrei dimensionare il vettore
dim rifmatrice as matrice '???? creare il riferimento alla type
for i=1 to i
rifmatrice.vettore(i)=valorepset '??????popolare il vettore
next
open "C:\prova" for random shared len=I*2
put #1,1,rifmatrice 'scrivere il vettore su disco con una sola put
close

'quello che non riesco a capire è come definire un record contenente una matrice
'dinamica e poi dopo averla popolata scaricarla su disco.
spero di essere stato chiaro (il codice che ho scritto sopra è
a titolo di esempio) perchè ho provato a scrivere in tutti i modi
codice... ma niente!

aaa
01/08/10 10:58
nessuno
Come ti dicevo, se devi solamente memorizzare il vettore non è necessaria la struttura (che si usa quando ci sono più elementi, anche di tipo diverso).

Considera che, per i vettori dinamici il VB6 salva su disco con la PUT i dati preceduti da un header che descrive il vettore, di lunghezza

2+8*numerodimensioni

Nel tuo caso, dato che parliamo di un vettore, avremo

2+8*1

ovvero 10

Questo valore dovrà essere aggiunto nella OPEN (che non era scritta correttamente).

Inoltre, dovrai dimensionare il vettore partendo esplicitamente dall'elemento 1 (nella REDIM).

Considera che i dati scritti dalla PUT con le informazioni aggiuntive di cui ti dicevo, le puoi rileggere in modo trasparente con la GET in VB6 ma dovrai tenerne conto se userai altri programmi che tratteranno il file.

Se ti serve che un altro programma si aspetti un altro tipo di struttura del file, allora dovrai passare alla modalità BINARY della OPEN e puntare ai record con la SEEK.

Per capirci, il tuo codice dovrebbe diventare

Public vettore() As Integer

Public Sub Salva()
    Dim i As Long, j As Long
    
    i = 100  ' Il valore che ti serve

    ReDim vettore(1 To i)

    For j = 1 To i
        vettore(j) = 0  ' Quello che vuoi
    Next j
    
    Open "C:\prova" For Random As #1 Len = 10 + i * 2
    Put #1, 1, vettore
    Close
End Sub


Considera che anche il ciclo era sbagliato ... non puoi scrivere "da i a i" ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
02/08/10 8:53
enzolone
Grazie
tutto Ok

aaa