Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Verificare se un array è nothing

Di un Array possiamo conoscere l'indice superiore o quello inferiore, ridimensionarne la struttura, scorrerne gli elementi ecc. ecc.. Tramite la funzione isArray() è anche possibile ricavare se una variabile è un array oppure no.

Dim mioArray() as Long
Dim noArray as Long

    Debug.Print isArray(mioArray)    ' Output -> True
    Debug.Print noArray(mioArray)    ' Output -> False



Quello che può capitare è il dover testare se il nostro array contiene valori, ma purtroppo, con i mezzi in nostro possesso, può non essere semplice.
Nell'esempio seguente l'istruzione IF genererà un Run-Time error '9' subscript out of range, dato che gli elementi dell'array non sono ancora stati valorizzati.

Dim mioArray() as Long    
    '
    ' Verifico se sono in presenza di un array
    '
    If Not isArray(mioArray) Then Exit Function
    '
    ' Nonostante sia in presenza di un array la seguente istruzione genererà Run-Time error '9' subscript out of range
    '
    If lBound(mioArray)= 0 Then
        ...
    End If



Gli array in VB6 NON sono considerati oggetti, come accade tra l'altro in linguaggi più "recenti" come il .Net e quindi è inutile tentare di scrivere mioArray = Nothing poichè otterremo solamente un errore.

In questo caso è necessario ricorrere all'API SafeArrayGetDim che ci restituirà 0 (zero) qualora non esistano elementi nel nostro array.

Option Ecplicit
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long

Dim mioArray() as Long    
        '
        '
        '
    If SafeArrayGetDim(mioArray) = 0 Then
        Debug.Print "Nessun elemento in mioArray"
    End Ff
        


Per chi non ama particolarmente le API, può sempre ricorrere alla seguente funzione che restituisce, oltre tutto, il numero di elementi che costituiscono l'array.


Private Function getArrayDim(ByRef mioArray As Variant) As Long
'***********************************************************************************
'Func.: getArrayDim(Creazione SB-13/02/2009; Mod.:             )
'Desc.: Restituisce il numero di elementi contenuti in un Array
'DLL. :
'Par. : mioArray    Variabile da analizzare
'Ret. : Long        Numero di elementi contenuti nell'array
'                   -1: Non si tratta di un Array
'                   0 : Array vuoto, non contenente valori
'***********************************************************************************
Dim Result As Long
Dim x As Integer
On Error Resume Next

    If Not IsArray(mioArray) Then
        Result = -1
    Else
        Result = UBound(mioArray) - LBound(mioArray) + 1
        If Err.Number <> 0 Then Result = 0
        Err.Clear
    End If
    '
    ' Restituisco il numero di elementi presenti nell'array
    '
    getArrayDim = Result
End Function


Categoria: VB6
venerdì, 13 feb 2009 Ore. 14.38
Statistiche
  • Views Home Page: 105.750
  • Views Posts: 530.823
  • Views Gallerie: 88.838
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003