Choose: uso proprio ed uso (ma guarda un po') nelle matrici
Il problema
La funzione Choose è utilizzata per restituire un valore da un elenco in base ad un indice indicato tra gli argomenti.
La sua sintassi è:
Choose(indice, val1, val2, ..., val-n)
Indice è un valore compreso tra 1 ed il numero di elementi compreso negli argomenti valx, ma non solleva errori se ha un valore al di fuori di questo intervallo. Semplicemente non restituisce nulla. Indice può essere rappresentato sia da costanti numeriche che da variabili anch'esse di tipo numerico
valx è l'elenco dei valori tra cui sceglierne uno in base al valore di Indice
se indice è 2 dall'elenco dei valori viene scelto val2
se indice è 5 viene scelto val5
Questo che segue è un esempio d'uso della funzione Choose. Le due istruzioni evidenziate in grassetto vengono mostrati un esempio d'uso della funzione con variabili ed uno da costanti stringa:
|
Sub EsempioChoose() |
Le prime righe servono per ottenere dall'utente una scelta e per verificare se l'utente ha effettuato una scelta giusta
Viene richiesto di scrivere un numero che viene memorizzato nella variabile X Se viene superato il controllo (quasi doveroso in ogni richiesta di Input che si rispetti)
verrà restituito nella variabile Scelta un valore in base al numero digitato e memorizzato nella variabile X |
La questione Matrici
La funzione può essere usata anche per costruire delle matrici.
Usare Choose per costruire una matrice è semplice: è sufficiente usare per Indice il contatore di un ciclo e memorizzare il valore scelto in una matrice anziché in una semplice variabile.
E' ovvio che questo metodo, come quello usato con la funzione Array o con la funzione Split, è comodo quando abbiamo pochi elementi da memorizzare nella matrice.
I tre metodi sono simili, ma quello con Choose, secondo me, è più flessibile ed più comodo e lo vedremo tra poco.
Con Array avremo:
Matrice = Array("Mic", 2, "carlo", 7, "giovanni")
Occorre tener presente che la matrice così creata avrà tre particolari caratteristiche:
la matrice sarà di tipo dinamica : infatti il comando Erase Matrice la distrugge veramente e leggendone i limiti si provoca un errore "Indice non incluso nell'intervallo")
avrà una sola dimensione
la base degli indici è sensibile alla Option Base impostata nel modulo
Con Option Base 1 la matrice avrà l'indice inferiore pari a 1 e l'indice superiore pari al numero degli elementi in essa memorizzati (nell'esempio sopra riportato sarà pari a 5).
Con Option Base 0 o addirittura omesso (è la situazione di default) avrà l'indice inferiore pari a 0 e l'indice superiore pari al numero degli elementi in essa memorizzati -1 (nell'esempio sopra riportato sarà pari a 4: tra 0 e 4 le locazioni create saranno uguali a 5)
Per questo motivo dobbiamo porre attenzione quando andremo a leggere i dati memorizzati nella matrice.
Con Split avremo:
Dati = "Giuliana*Michele*Gabriele*Giosia*Stefano*Marcello*Gaetano*Maria*Edith"
Matrice = Split(Valori, "*")
Queste sono le caratteristiche della matrice creata con questo metodo.
la matrice sarà di tipo statico: infatti il comando Erase Matrice causa solo lo svuotamento delle locazioni della matrice e non la sua completa distruzione; la prova è che la lettura dei suoi limiti non provoca errori
anche questa matrice avrà una sola dimensione
la base degli indici della matrice non sarà sensibile alla Option Base usata ma sarà sempre uguale a 0 (zero)
La questione Choose
Se per creare la nostra matrice utilizziamo la funzione Choose la nostra matrice sarà come noi la vogliamo:
Statica o Dinamica
ad 1 o più dimensioni
con l'indice inferiore che più ci aggrada: 0, 1, o altro.
Ma vediamo subito l'esempio che sto proponendo. In questo ho usato una matrice statica, ad 1 dimensione e con gli indici inferiori e superiori rispettivamente posti ad 1 e a 10 con: Dim Matrice(1 To 10) per memorizzare 10 elementi
|
Sub Crea_Array_Con_Choose()
Matrice(A) = Choose(A, "Michele", "Carlo", "Francesco", "Franco", "Gabriele", "Girolamo", "Angelo", "Marcello", "Giuseppe", "Giorgio") Next
End Sub |
La struttura della matrice così costruita avrà questo aspetto:
Con questo metodo potremmo creare anche una matrice a più dimensioni. Per esempio potremmo desiderare di costruire una matrice a due dimensioni:
10 righe
3 colonne
per memorizzare il nome, la città e l'indirizzo dei nostri bravi amici come mostrato nel seguente esempio.
Uso la funzione Choose su un gruppo di elementi per ogni colonna della matrice.
|
Sub Array_Con_Choose()
Matrice(A, 1) = Choose(A, "Michele", "Carlo",
"Francesco", "Franco", "Gabriele", "Girolamo", "Angelo", "Marcello",
"Giuseppe", "Giorgio") Next End Sub |
La matrice avrà questa struttura:

Conclusioni
Come vedete dagli esempi sopra riportati, questo modo di costruire le matrici (Array, Split, Choose) va bene quando le matrici debbono contenere pochi elementi. E' ovvio che se la matrice dovrà memorizzare un numero elevato di elementi sarà più conveniente, anche se richiede un tempo di esecuzione relativamente più lungo, la classica creazione usando i cicli come mostrato negli esempi dell'ultimo articolo (Le Matrici: la Funzione Filter).
A questo punto posso suggerire di dare un'occhiata agli articoli già pubblicati nei due siti: l'articolo "le matrici" nel vecchio sito e gli articoli Suggerimenti (aggiornabile), Suddividere le stringhe e Suddividere (casi particolari) in questo, nonché l'articolo Le Matrici - Atto Unico del mio amico Ennius sempre in questo sito
prelevato sul sito www.ennius.altervista.org