Newsgroup: it.comp.lang.visual-basic
Titolo: dati in memoria (array)

hello
ho la necessita di popolare un array con circa un migliaio di numeri in
single
la via piu semplice e'
dim  dati(1 to 1000) as single
dati(1) = 23.44
dati(2) = 22.31
......
....
dai(1000) = -53.1234
oppure
scrivere i 1000 numeri in un file e leggerli
open "filedati.txt" for input as #1
for k=1 to 1000
input #1,dati(k)
next k
close #1
opputr
dim dati as variant
 '                     (1)    (2)                (1000)
dati = array(23.44,22.31   .......,-53.1234)
vi immaginate la lunghezza
il metodo di utilizzare un file non lo voglio utilizzare perche il file che
contiene i dati deve essere allegato al progetto con la pericolosita che
comporta (l'utente puo cambiare i dati,il file e' cancellato o
spostato,rinoimato   erroneamente, ecc ecc)
penserei di utilizzare il file di risorse di VB
ho creato con un programmino semplicissimo un file binario (in single) dei
miei 1000 numeri ed ho creato il file di risorse   interp.res  e incluso nel
progetto vb
nel mio programma in vb6 ho scritto
dim dati(1 to 1000) as single
dim tempdata  as string
tempdata = LoadResData("dati","binary")
....oppure
dim dati(1 to 1000) as single
dim tempdata  as byte
tempdata = LoadResData("dati","binary")
come faccio a popolare la mia matrice  dati()    ???
dati(1) =  ?????
........
dati(1000) = ??????
oppure
for k = 1 to 1000
dati(k) = ??????
next k
ho provato con le varie funzioni di conversione ma ottengo errori di
compilazione
penso che serva utilizzare qualche API  che copia una zona di memoria
(tempdata) in un'altra ( dati() ) senza che intervengano modifiche nei dati
pensso che la funzione loadresdata non faccia altro che estrarre byte (senza
modificare nulla) dal file di risorse
grazie100 qnticipatamente
leonello

 nel mio programma in vb6 ho scritto
[...]
Io nel file res metteri ua stringa con i numeri separati da | o ; poi
tramite "split" sulla stringa otterrei un array! Probabilmente esiste un
metodo migliore ma questo dovrebbe funzionare! ;)
hth

 single
Adesso farò inorridire un po' di puristi.
In design-time:
1) metti i tuoi 1000 numeri in un file .txt, es: numeri.txt.
   Un numero per riga. Usa il punto come separatore decimale.
   Il file deve apparire come scritto con l'istruzione
   Print FileNum, str$(Numero)
2) Metti nel form una TextBox (es: Text1) multiline
3) Apri con un text editor il file numeri.txt
4) Copia nella clipboard tutto il testo contenuto nel file e 
   incollalo nella property text della TextBox
In run-time:
Private Sub Command2_Click()
    Dim n As Long
    Dim NumStr() As String
    Dim Num() As Single
    NumStr() = Split(Text1, vbCrLf)
    ReDim Num(UBound(NumStr()))
    For n = 0 To UBound(NumStr())
        Num(n) = Val(NumStr(n))
    Next n
End Sub
Ciao.
pinco_pallo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

next k
Secondo me ci sei vicino ;-)
Dato che sono tutti single, dovresti avere un'esecuzione
fulminea facendo cosi':
Dim leggi() As Single
Dim tempdata()  As Byte
Dim sizeofSingle As Long
Dim singolo As Single
Dim uboundArray As Long
Dim nFile As Integer
 
tempdata = LoadResData("dati","binary")
nFile = FreeFile()
Open "C:\test" For Binary As #nFile
Put #nFile, , tempdata
 
sizeofSingle = LenB(singolo)
uboundArray = (UBound(tempdata) + 1) \ sizeofSingle - 1
ReDim leggi(0 To uboundArray)
Seek #nFile, 1
Get #nFile, , leggi
Close #nFile
-- 
ciao, hal

 ha scritto nel messaggio
news:b5pvoh$i87$1...@half.spin.it...


 ha scritto nel messaggio
news:v9c18v86t5dhfd179...@4ax.com...


End Sub
Bene, l'importante e' che comunque tu abbia risolto.
Considera che dovresti perdere un po' in prestazioni
perche' converte 40K di dati in stringa, quindi
alloca una matrice di stringhe che poi converte in
numero. Ma con i pc di oggi, in effetti, non dovrebbe
essere un problema ;-)
-- 
ciao, hal