Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Function

Ciao a tutti
Puo' una Function restituire una matrice?
Se si un esempio per favore.

 Se si un esempio per favore.
Puoi passarla come parametro ByRef
e modificarla all'interno della function:
-----------------------------------------
Sub Main ()
    Dim x(4) As String
    a = MiaFunc(x)
    MsgBox x(3)
End Sub
Function MiaFunc(ByRef z() As String
    z(0) = "Zero"
    z(1) = "Uno"
    z(2) = "Due"
    z(3) = "Tre"
    z(4) = "Quattro"
End Function
-----------------------------------------
A questo punto la MsgBox visualizzerà "Tre".
--
Er Roscio.


VB4 e precedenti:
Sub Test(ByRef arTest() As String)
VB5:
Function Test() As Variant
VB6 e successivi:
Function Test() As String()
nel primo caso, la restituzione di matrici non e' supportata; devi usare un
parametro di tipo array passato per riferimento e caricarlo all'interno
della routine (che a questo punto puo' essere indistintamente una Sub o una
Function)
a partire da VB5, il tipo Variant puo' contenere una matrice; ecco quindi
che nel secondo caso puoi dichiarare una funzione che restituisce tale
valore e utilizzare al suo interno una variabile Variant alla quale
applicherai il 'ReDim' del caso.
In VB6 e in 
VB.NET
 le matrici possono essere restituite in maniera diretta,
con la sintassi sopra descritta.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 ha scritto nel messaggio
news:9SFo8.31141$pT1.8...@news1.tin.it...


 Function Test() As String()
Aggiungo solamente che la guida sconsiglia vivamente di usare questo metodo
causa abbassamento generale delle prestazioni del programma, un pò come per
IIF e DateDiff
Fabio

 ha scritto

cioe' iif() rallenta ?

> cioe' iif() rallenta ?
Dice.
è dal VB4 che so questa cosa, difatti non la uso mai.. però vattelapesca
dove l'ho letta..
fabio


Giusto e ovvio.
Una funzione che restituisce una matrice al momento dell'assegnazione deve
fare una copia di tutta la matrice e poi l'assegnazione.
Lavorando su una matrice come parametro invecie si manipola direttamente la
matrice in oggetto evitando sia la copia che l'assegnazione.
Inoltre VB gestisce male la restituzione di matrici producendo del codice
macchina per niente ottimizzato.
Ciao

 ha scritto

io ricordavo che richiedeva una piccola dll in piu', del che francamente mi
interessa poco. in genere la preferisco perche' tiene il codice piu'
compatto.
ciao, a.

 compatto.
a memoria a braccio (scusa il giro anatomico di parole) ricordo che DateDiff
usava una dll in più, non iif, ma nn sono sicuro.
quello che ricordo per certo è che era sconsigliato usarle entrambi
fab

 quello che ricordo per certo è che era sconsigliato usarle entrambi
purtroppo avevo archiviato solo questo sotto.
ciao, a.
==============================
DATE: 1/11/1996 -- 00:00:00
FROM: vb online
SUBJECT: iif function
==============================
Duplicates the IIF function but doesn't require an extra dll to be shipped
(MSAFINX.DLL).
Function myIIF (ByVal expr As Integer, ByVal truepart As Variant, ByVal
falsepart As Variant) As Variant
If expr Then myIIF = truepart Else myIIF = falsepart
End Function
=*=
"file not found" error when you distribute a program
Check to see if you use the IIF function. The IIF function requires the file
MSAFINX.DLL to be distributed with your application. This is not mentioned
in the documentation or the setup wizard.

 sia la copia che l'assegnazione.
Ehhmm!!! Le i...  :-P
Ciao.
-- 
BSD is for UNIX-lovers -- linux is for Windows-haters.

Per chi ha bisogno di qualcosa di concreto
L'esempio seguente illustra una funzione che restituisce una matrice con VB6
Dim a() As String
Private Sub Form_Load()
    For i = 0 To 2
        a() = test("uno", 20, 3)
        Label1(i).Caption = a(i)
    Next
End Sub
Public Function test(Indirizzo As String, CHIniz As Integer, NumCH As
Integer) As String()
    Dim x() As String
    ReDim x(NumCH)
    For i = 0 To NumCH - 1
        x(i) = CHIniz + i
    Next
    test = x()
End Function
per piccole matrici va bene.
Grazie a Tutti.

Scusate l' errore (ora dovrebbe essere giusto)
Dim a() As String
Private Sub Form_Load()


 Ehhmm!!! Le i...  :-P
Perchè "Le"?
1) Invece
Ciao

 1) Invece
Lavorando su una matrce come parametro nvece s
manpola drettamente la matrce n oggetto evtando
sa la copa che l'assegnazone.
+ compatto :)


Allora preferisco, come diceva Francesco Salvi in DriveIn, evitare le vocali
per risparmiare tempo nella pronuncia:
Lvrnd s n mtrc cm prmtr nvc s
mnpl drttmnt l mtrc n ggtt vtnd
s l cp ch l'ssgnzn.
Praticamente zippato :)
Ciao

 1) Invece
Perché era la seconda volta che lo scrivevi :-P
