Il giorno Thu, 7 Jan 2010 15:42:03 +0100, "Badrune"
Post by BadrunePost by Reventlovio sto scrivendo qualcosa sulle istruzioni di base di VbScript
e se possono interessare le pubblico qui così mi aiutate a sistemarle
per renderle più comprensibili.
metti metti!
e anche sul tuo sito!
Ok.
Il mio corso è su digilander.libero.it/Cenati/manuale.htm
Non ci sono pubblicità né banner. E poche immagini.
Se qualcuno se la sente può anche mandarmi due righe per dirmi cosa è chiaro e cosa non lo
è. Cosa migliorereste e cosa aggiungereste. Non sono un programmatore professionista.
Le lezioni di Franz avevano come obiettivo anche quello di confrontare il linguaggio Batch
con il VbScript, almeno quando possibile. Io invece non ho affrontato questo argomento,
che poteva però essere utile per gli utenti di questo newsgroup che sono già pratici di
BAT.
----------------------------------------------------------------------------------------------------------------------------
Perchè un Tutorial di VbScript?
[In questa pagina c'è una guida di VbScript ed i link ad altre pagine del sito con
materiale di supporto, documentazione e un elenco di funzioni utili a semplificare la
programmazione]
Quando si inizia a strudiare un nuovo linguaggio di programmazione si trovano tutte le
informazioni necessarie nei file di help. Ma spesso queste informazioni non sono
nell'ordine nelle quali ci servono. Ad esempio troviamo l'elenco delle istruzioni in
ordine alfabetico, con ATAN tra le prime, che serve a calcolare l'arcotangente di un
angolo. Se si studiano le istruzioni in quest'ordine bisogna essere ben determinati per
riuscire a cavarci qualcosa di buono.
Per chi è agli inizi è invece utile essere accompagnato passo per passo alla scoperta
della sintassi dei comandi più utilizzati. Se poi si ha già una esperienza di
programmazione in altri linguaggi sarà facile imparare per analogie e differenze rispetto
a ciò che già si conosce. Riuscire ad ottenere qualcosa, anche semplice, da un proprio
programma è abbastanza gratificante da spingere a saperne di più
Nel guardarmi intorno alla ricerca di informazioni sui linguaggi di cui avevo sentito
parlare, mi sono trovato alle prese con materiale già per esperti o con guide veramente
scarne. Secondo me il primo motivo per cui una persona dovrebbe iniziare ad occuparsi di
programmazione è "perchè gli serve". Se si conosce già un linguaggio di programmazione,
forse non serve impararne un'altro. Ma può anche essere che si cerchi di fare qualcosa che
non è possibile con gli strumenti che si conoscono. Oppure qualcosa di più facile o più
portabile. Ecco, VbScript è preinstallato con Windows, gli script si possono scrivere e
modificare con il Notepad e non hanno bisogno di installazione. Questi potrebbero essere
già dei buoni motivi per imparare ad usarlo. Posso aggiungere che essendo VbScript il
fratello minore di Visual Basic, quello che si impara può essere usato per fare un passo
in avanti senza dover ricominciare da zero.
Spero che questa pagina riesca a colmare una carenza sulle nozioni di base del linguaggio
VbScript, soprattutto in lingua italiana. Certamente non copre tutte le istruzioni e le
funzioni di VbScript, ma permette di farsi un'idea di cosa si può fare con questo
linguaggio.
Cosa serve per programmare in VbScript
Ciò che è necessario per scrivere codice in VbScript è con molta probabilità già
installato sul computer. VbScript fa parte della dotazione di Windows e per scrivere
programmi è sufficiente il Blocco Note. Altre informazioni sono disponibili nella pagina
"cosa è e come imparare VbScript", mentre se più avanti vorrete usare un programma
specifico che vi assista nella scrittura del codice (suggerendo la sintassi dei comandi)
potete consultare la pagina sugli "Editor".
Suggerisco di scrivere il codice proposto (anzichè fare copia & incolla) in modo da
prendere maggiore familiarità con la sintassi. Una volta capito il meccanismo, inventate
altri esempi per vedere come si comporta VbScript.
C'è anche una pagina con una raccolta di materiale di supporto che ho trovato molto utile.
Guide, un semplice editor gratuito, raccolte di spezzoni di codice, ecc.
Tutta roba in cui mi sono imbattuto e che lo avessi saputo prima avrei fatto molta meno
fatica a reinventare la ruota.
A questo proposito, c'è anche una pagina con l'elenco di molte funzioni (scritte da me o
trovate in rete) che semplificano molto la programmazione. Oltre ad una breve descrizione,
c'è ovviamente il codice scaricabile.
Allora iniziamo
Come ogni manuale che si rispetti e nel solco della tradizione iniziata da Kernighan e
Ritchie negli anni 70 con "The C Programming Language", il primo programma in VbScript che
prepareremo servirà a salutare l'utente.
Apriamo il blocco note di Windows (Notepad) e scriviamo la nostra prima riga di codice:
MSGBOX "ciao a tutti"
Poi salviamo il testo in un file VBS. Per salvare bisogna scegliere il menu File/Salva,
scrivere il nome del file da creare "ciao.vbs" nella casella "Nome File" e (IMPORTANTE!)
nella sottostante casella "Salva come" bisogna scegliere "Tutti i file". In questo modo si
creerà il file ciao.vbs, che ha l'icona di un tabulato a righe, come di un modulo continuo
a forma di "S".
Ora possiamo entrare nella cartella dove abbiamo salvato il file ciao.vbs ed avviare con
un doppio click il programma. Apparirà una finestrella come la seguente.
Ecco che è stata sufficiente una riga per creare una finestra sullo schermo. Vedremo come
fare anche qualcosa di più utile.
Per ora introduciamo qualche ulteriore caratteristica della finestra messaggio. Il primo
parametro, come abbiamo visto, indica il testo da mettere nella finestra. Il secondo
indica quali pulsanti o icone devono esserci, il terzo indica il titolo della finestra.
' Questo è un commento. Infatti la riga inizia con un apice.
MsgBox "ciao a tutti", VbOkOnly, "Titolo della finestra"
VbOkOnly in realtà vale zero, quindi potremmo anche non mettere nulla ed ottenere una
finestra come quella dell'immagine. Nel file di help di VbScript alla voce MsgBox abbiamo
una lista delle costanti che possiamo utilizzare come secondo parametro. Si tratta di una
comodità per rendere più leggibile il codice, in quanto potremmo utilizzare direttamente i
numeri al posto delle parole chiave. VbCritical fa apparire la x bianca sul pallino rosso
tipica dei messaggi di errore. VbQuestion mostra una finestra col punto di domanda.
VbExclamation mostra il segnale di attenzione (triangolo giallo con punto esclamativo),
VbInformation mostra la "i" nel pallino blu. Provate.
' Esempio di finestra con la X bianca nel pallino rosso.
MsgBox "Questo è un messaggio di errore", VbCritical, "Attenzione"
Dato che VbQuestion fa apparire il punto di domanda, la finestra dovrebbe poter offrire la
possibilità di scelta tra più opzioni. Con questo codice otteniamo quindi una risposta
dall'utente:
' Rivolgo una domanda all'utente.
Risposta = MsgBox ("Sei proprio sicuro?", vbQuestion + vbYesNo, "Domanda")
Questo esempio ci introduce al prossimo argomento. Più avanti torneremo ad occuparci della
istruzione MsgBox.
Le Variabili.
Le variabili sono delle "scatole" che possono contenere un valore. Questa è la definizione
classica ed anche un po' semplicistica. In pratica nei nostri programmi possiamo assegnare
un valore qualsiasi ad una variabile, anche che sia il risultato di qualche calcolo o
elaborazione. I nomi delle variabili devono iniziare con una lettera e possono contenere
lettere e numeri. Non importa se usiamo le lettere maiuscole o minuscole, quindi
Variabile1 e VARIabile1 sono la stessa cosa. Per fortuna, altrimenti rischieremmo di fare
degli errori per un banale errore di digitazione. Per assegnare un valore ad una variabile
basta scriverne il nome seguito da un uguale e poi dal valore che le si vuole dare. Il
valore può essere anche il risultato di una operazione su numeri o altre variabili. Per i
calcoli si usa il più, il meno, l'asterisco per la moltiplicazione e la barra "/" per la
divisione. Nell'help ci sono inoltre molte funzioni per il calcolo di radice quadrata,
operazioni trigonometriche, ecc.
Per chi non ha alcuna esperienza di programmazione, segnalo che una espressione come x=x+1
in matematica non ha senso, ma in molti linguaggi di programmazione sì. Questo perchè non
si tratta di una espressione di equivalenza, ma con questo codice si intende che alla
variabile x (a sinistra dell'uguale) si assegna il valore che sta a destra del segno di
uguale, cioè x+1. In pratica con questo codice aumento di una unità il valore della
variabile x. In alcuni altri linguaggi l'operazione di assegnazione si fa con un simbolo
diverso (ad esempio x:= 4) per non confondere le idee, mentre si riserva il segno "uguale"
a quando si esegue un confronto fra valori. In questo caso x= (x+1) servirà a confrontare
i due valori ed il risultato sarà "falso". Volevo fare un chiarimento e forse ho
complicato le cose...
Cercate di usare dei nomi di variabile che significhino qualcosa, in modo che rileggendo
il programma sia più facile capire cosa state facendo. Ad esempio chiamate le variabili
NumeroTotaleDiPersone e ImportoAlNettoDiIVA. Usate anche i commenti, per spiegare cosa
succede. Un commento all'inizio di un blocco di programma potrebbe descrivere quali dati
entrano e quali dati escono. E magari come vengono elaborati.
Bisogna notare anche che in VbScript le variabili non sono distinte in tipi diversi come
avviene invece in altri linguaggi. La variabile A può contenere indifferentemente un
numero o una frase. A seconda del modo in cui verrà usata, la variabile si comporterà come
un numero o come una stringa di testo. Questo a volte può essere molto comodo, ma a volte
può non essere chiaro quale è il comportamento di VbScript.
Quando si realizza uno script è utile mettere una MsgBox ogni tanto che mostri quale è il
valore di una variabile a quel punto dello svolgimento del programma. Serve per essere
certi che si abbia ottenuto il valore giusto per continuare l'elaborazione.
'Qualche esempio con i numeri
PrimoNumero = 18
SecondoNumero = 24
Risultato= PrimoNumero + SecondoNumero
MsgBox Risultato 'Qui vedrete 42, era facile.
'Qualche esempio con le stringhe di testo
Nome = "Giovanni"
Messaggio = "Il mio nome è " & Nome
MsgBox Messaggio
a = 10
b = 20
MsgBox a + b 'Mostrerà 30
MsgBox a & b 'Mostrerà 1020
Le stringhe di testo si concatenano usando la e commerciale "&". Nell'esempio concateno
"Il mio nome è " con il contenuto della variabile Nome. Poi mostro il risultato sullo
schermo.
L'ultimo esempio è meno intuitivo. Le variabili A e B contengono due numeri, ma se si usa
l'operatore di concatenazione delle stringhe ( & ) otteniamo la somma di due stringhe
anzichè la somma di due numeri. VbScript ha capito, dall'operatore che abbiamo usato, che
intendevamo trattare A e B come stringhe di testo.
Per gli esperti, aggiungo che il testo può essere anche concatenato con il "+". Proprio
perchè sono esperti, già sanno che non è il caso di rischiare e quindi se vogliamo essere
certi di quello che vogliamo ottenere basta usare il + per i numeri ed & per il testo.
Più avanti (parlando di Subroutine) aggiungo qualcosa sull'argomento "variabili".
Le Costanti
Le costanti sono "variabili" delle quali non è possibile variare il valore.
Si indicano in una riga di codice con CONST Autore="Giovanni" oppure PiGreco= 3.14
e il tentativo di modificarle genera un errore.
Ora che abbiamo parlato un po' delle variabili e delle costanti, proviamo a chiedere
all'utente di fornirci dei dati. Il primo programma che ti fa una domanda ed elabora la
tua risposta è un'emozione.
Input dall'utente
Esiste una semplice funzione per chiedere all'utente di inserire un dato. InputBox.
Vediamone la sintassi.
Nome = InputBox ("Come ti chiami?", "Inserire il nome", "Giovanni")
MsgBox "Il tuo nome è " & Nome
InputBox restituisce un risultato, quindi bisogna usare una variabile (Nome, nell'esempio)
che conterrà l'input dell'utente. Sullo schermo appare una finestra dal titolo "Inserire
il nome" che contiene la domanda "Come ti chiami?" e la risposta predefinita "Giovanni".
Solo il primo parametro è obbligatorio, mentre i successivi possono anche non esserci.
Guardando nell'help potrete trovare anche altri parametri facoltativi, comunque di raro
uso. Se l'utente clicca OK, il contenuto della casella di testo sarà assegnato alla
variabile Nome, altrimenti la variabile sarà vuota.
A questo punto non è difficile preparare uno script che chieda un numero, poi un secondo
numero ed infine ne mostri la somma. Due InputBox e poi una MsgBox "la somma di " & A & "
e di " & B & " è uguale a " & A+B
Difficile? No, proviamo. Sono tutti pezzi di testo quindi dobbiamo concatenarli con "&".
Il risultato, che è una somma, lo calcoliamo con il più.
a = InputBox ("Primo numero da sommare", "Somma")
b = InputBox ("Secondo numero da sommare", "Somma")
MsgBox "La somma di " & a & " e di " & b & " è uguale a " & a+b
Per ora lasciamo perdere che l'utente potrebbe inserire dati non validi (testo anzichè
numeri) e far risultare dati improbabili.
Con quello che abbiamo imparato fino ad ora si possono già fare tante cose. Ma un
programma intelligente deve poter fare delle scelte, quindi introduciamo un nuovo comando.
Se...allora...altrimenti..Fine Se.
Prima di parlare di questo costrutto, spreco due parole sulla programmazione in generale:
scrivere un programma vuol dire aver bene presente come si fa a risolvere il problema. La
sostanza di quello che voglio dire è tutta qui. Bisogna sapere quale è il procedimento che
partendo dai dati ci porta alla soluzione, bisogna conoscerlo bene in modo da tradurlo in
una forma comprensibile al computer. Prima che il computer sappia come fare, lo dobbiamo
sapere noi. A volte scrivere il programma porta a riflettere sul problema ed aiuta a
formalizzarlo e comprenderlo meglio. Si arriva ad un certo punto e si pensa: "se succede
questo devo comportarmi così, mentre se succede quest'altro...". La scelta tra ipotesi
diverse è quello di cui ci occupiamo adesso.
Le istruzioni che permettono di effettuare una scelta sono IF e THEN. SE ed ALLORA.
Scriviamo un programma che calcola il risultato di una divisione, ma solo se il
denominatore è diverso da zero.
a = InputBox ("Inserisci il numeratore", "Divisione")
b = InputBox ("Inserisci il denominatore", "Divisione")
if b<>0 then MsgBox a & " diviso " & b & " è uguale a " & a/b
Il comando If esegue l'istruzione che segue Then, ma solo se la condizione è vera. Si
possono mettere anche più istruzioni dopo il Then, ma devono essere separate dai due punti
":", che servono in generale per separare più istruzioni sulla stessa riga.
Ed ora, per introdurre il comando ELSE (altrimenti), modifichiamo il programma in modo che
anche in caso di errore venga visualizzato qualcosa. Questa costruzione si sviluppa su più
righe. Per comodità si usa incolonnare diversamente le istruzioni in modo da rendere più
leggibile quello che viene eseguito sotto la condizione. L'incolonnamento non cambia il
senso del codice, ma lo rende più leggibile. E' importante, soprattutto nel caso di codice
più complesso con un if dentro l'altro, che l'incolonnamento sia ben fatto, altrimenti
potrebbe sembrare che una istruzione dipenda da un if mentre dipende da un altro.
if b=0 then
MsgBox "Divisione per zero non ammessa", vbCritical, "Errore"
else
MsgBox a & " diviso " & b & " è uguale a " & a/b
End If
Come vedete, se non c'è nulla dopo il Then significa che stiamo scrivendo una condizione
su più righe. Quindi serve una istruzione END IF che concluda il blocco.
Ricordate cosa significa il secondo parametro "VbCritical"? Fa apparire una finestra con
la "X" rossa per significare che si è verificato un errore.
C'è un altro costrutto che permette di eseguire delle scelte. E' il SELECT..CASE. E'
simile ad una serie di IF.
I cicli For..Next
Queste sono istruzioni molto potenti, con le quali si esprime la potenza e la velocità di
calcolo di un computer. Servono a ripetere per un certo numero di volte lo stesso blocco
di codice.
Nel ciclo For c'è una variabile che assume un valore iniziale e che viene incrementata
ogni volta che si arriva al comando Next. Tutto quello che c'è tra il For ed il Next viene
eseguito fino a che la variabile raggiunge un valore finale. Ok, meglio fare un esempio.
For contatore = 1 to 5
msgbox "Il contatore vale " & contatore
next
msgbox "Fine"
La variabile Contatore all'inizio vale 1. Viene mostrato un messaggio che dice "Il
contatore vale 1". Quando si arriva al next, il ciclo ricomincia e il contatore viene
incrementato di uno. Appare il nuovo messaggio che dice "Il contatore vale 2".
Il programma arriva fino a "Il contatore vale 5" dopo di che il ciclo termina e anzichè
ripartire dall'inizio prosegue alla istruzione successiva mostrando il messaggio "Fine".
Ora proviamo a fare la somma dei numeri da uno a mille. Dunque, ho bisogno di una
variabile dove mettere la somma man mano che si forma e un ciclo per scorrere tutti i
numeri.
Somma=0
for i = 1 to 1000
Somma = Somma + i
next
MsgBox "La somma è " & Somma
Adesso voglio sommare solo i numeri pari. L'istruzione FOR ha la possibilità di
incrementare il contatore di qualsiasi valore, non solo di uno come abbiamo visto fin'ora.
Quindi partiamo dal valore zero (o due) e incrementiamo di due alla volta specificandolo
con l'istruzione STEP, che significa "passo".
Somma=0
for i = 0 to 1000 step 2
Somma = Somma + i
next
MsgBox "La somma dei numeri pari da zero a mille è " & Somma
In questi esempi c'è una sola istruzione (il calcolo della somma) tra il for ed il next,
ma ce ne possono essere quante ne vogliamo.
Per completezza devo anche dire che esiste una istruzione "Exit For" che forza l'uscita
dal ciclo (se, ad esempio, si verifica una certa condizione). A volte è opportuno
utilizzare un ciclo for con una istruzione di uscita anticipata, ma più frequentemente si
utilizzano delle istruzioni nelle quali la ripetizione del codice è proprio legata al
verificarsi di una condizione. Le vediamo adesso.
Istruzioni While...Wend
Il blocco di istruzioni compreso tra while e wend viene eseguito la prima volta se la
condizione accanto a While è vera. Al termine del blocco (quando si arriva all'istruzione
Wend) la condizione viene verificata di nuovo ed eventualmente il codice è eseguito di
nuovo.
La particolarità di queste istruzioni è che il codice viene eseguito se la condizione è
VERA. Inoltre, il controllo viene fatto in testa al codice, quindi se la condizione non si
avvera può accadere che il codice non venga del tutto eseguito.
L'avvertenza da tener presente quando si lavora con questo genere di cicli è che una
svista nella scrittura del codice può produrre un loop (ciclo) infinito ed il programma
non termina più. Magari perchè nelle istruzioni che abbiamo scritto ci siamo dimenticati
di modificare i dati utilizzati per la condizione del While. Insomma, se la condizione è
vera e nel codice non la modifico, lo script continuerà a lavorare senza mai uscire. E'
buona cosa salvare sempre il codice creato prima di lanciare il programma in modo da non
perdere le ultime modifiche apportate se il programma "va in loop".
Vediamo il listato qui sotto. All'utente viene chiesto di inserire un numero. Questo
numero viene sommato al precedente e le richieste proseguono fin quando la somma non
supera il 100.
In altre parole: fintanto che la somma è minore o uguale a zero, chiedi un numero e
sommalo al totale.
Somma=0
While somma<=100
numero=inputbox ("inserisci un numero da sommare")
somma=somma + numero
Mancanti=100-somma
If mancanti >0 Then msgbox "La somma è " & somma & Vbcrlf & "Per arrivare a 100 ne
mancano " & mancanti
Wend
msgbox "Hai raggiunto il numero " & somma
Abbiamo anche l'occasione di vedere altre caratteristiche di VbScript. In una riga calcolo
anche quanto manca ad arrivare a 100. Poi uso un IF per mostrare quanto manca ad arrivare
a 100, ma solo se non l'ho ancora superato. Per evitare che mi dica che ne mancano "meno
10" nel caso abbia già superato il cento.
Tra le varie cose che sono concatenate nell'istruzione msgbox c'è una cosa strana:
"VbCrLf". E' una costante speciale di VbScript che indica il carattere di ritorno a capo.
Quello che c'è dopo il VbCrLf finirà su una nuova riga.
Provate a togliere la prima riga (Somma=0) e lanciare il programma. A me è successo che ha
trattato i dati inseriti dall'utente come del testo. Quindi scrivendo due volte "1" mi
diceva che la somma era 11. Questo è un caso in cui noi e VbScript non ci capiamo sul
contenuto delle variabili. Per ovviare a ciò basta assegnare un valore (numerico o di
testo) alla variabile per far capire cosa deve contenere e come deve comportarsi con le
operazioni sul contenuto. Ci sono anche alcune istruzioni dedicate proprio a forzare
VbScript a considerare un certo tipo di dati come contenuto di una variabile (nell'help si
può cercare CINT, CSTR, CCUR, ecc.)
Istruzioni Do..Loop: creare cicli più flessibili
Abbiamo visto le potenzialità di While, ma ad un certo punto si incontrano anche i suoi
limiti. Questa nuova istruzione che vediamo ha la possibilità di mettere il controllo in
testa oppure in coda (in quest'utlimo caso il codice viene sempre eseguito almeno una
volta), ha la possibilità di uscire dal ciclo (con EXIT DO) e si può scegliere se la
condizione per eseguire il codice deve essere vera oppure falsa.
Queste sono le due sintassi possibili:
Do [{While | Until} condizione]
[Istruzioni ]
[Exit Do]
[Istruzioni ]
Loop
Oppure
Do
[Istruzioni]
[Exit Do]
[Istruzioni]
Loop [{While | Until} condizione]
Usando l'opzione WHILE facciamo ripetere il loop quando la condizione è VERA. Ed usciamo
quando è FALSA.
Usando l'opzione UNTIL facciamo ripetere il loop quando la condizione è FALSA. Ed usciamo
quando è VERA.
In fondo non farebbe molta differenza, visto che basterebbe usare una delle due opzioni e
cambiare il tipo di controllo. Ad esempio WHILE x=5 equivale a UNTIL x<>5. In entrambi i
casi il ciclo viene ripetuto se x è uguale a 5 e si esce se x è diverso da 5. Si tratta
principalmente di una questione di chiarezza nella scrittura del codice, anzi soprattutto
nella rilettura e nella comprensione del codice.
Vediamo di modificare un pochino l'esempio precedente.
Somma=0
Do
numero=inputbox ("Sei a "& Somma & vbcrlf & "Inserisci un numero da sommare")
somma=somma + numero
Loop Until somma>= 100
msgbox "Hai raggiunto il numero " & somma
E' chiaro? Continua a chiedermi numeri finchè la loro somma non supera 100.
Vediamo un altro esempio, in cui impariamo una funzione un po' particolare che si chiama
EVAL( ). Serve, per semplificare, a calcolare il risultato di una operazione passata come
stringa di caratteri. EVAL("2+2") restituisce il valore di 4.
Do
calcolo=inputbox ("Inserisci un calcolo (BASTA per terminare)")
msgbox eval(calcolo)
Loop Until trim(ucase(calcolo))= "BASTA"
Abbiamo creato una calcolatrice. Si inserisce una formula (anche complessa, con parentesi
ed i segni + - * e /) e si ottiene il risultato. Scrivendo "basta" si esce.
Per rendere le cose più semplici all'utente, "basta" può essere scritto anche in
minuscolo. Il programma infatti mette l'input in maiuscolo con la funzione UCASE (che
significa upper case, cioè maiuscolo) e lo confronta con "BASTA".
Per essere ancora più sicuri, tolgo eventuali spazi prima e dopo quello che l'utente ha
inserito. Per far questo uso la funzione TRIM.
Avrei potuto anche usare la funzione INSTR(1,UCASE(calcolo),"BASTA") che è maggiore di
zero se nella variabile CALCOLO (resa tutta maiuscola) è contenuta la stringa "BASTA"
iniziando a controllare dal primo carattere. Il risultato è maggiore di zero perchè indica
la posizione del primo carattere della stringa trovata. Restituisce zero se non trova
nulla.
Le cose si stanno un po' complicando, ma è solo per dire che ci sono tante funzioni da
scoprire (nel file di help) oltre a Ucase, Lcase (per mettere in minuscolo), Instr,
InstrRev (per cercare partendo dal fondo) ed Eval.
Subroutine e Funzioni
Passiamo per un attimo a qualcosa di diverso. Nel codice ci possono essere delle parti
ricorrenti da eseguire in diversi punti del programma. Per quanto abbiamo imparato finora,
bisognerebbe duplicare le stesse parti tante volte quanto servono. E se c'è una modifica
da fare, correggere tutte le copie. Ci vengono quindi in aiuto le Subroutine, che sono
appunto pezzi di codice da richiamare all'occorrenza e con la possibilità di inviare dei
dati da utilizzare nei calcoli.
Beep 3,10
Beep 4,50
Sub Beep (n,wait)
For i = 1 To n
createobject("wscript.Shell").Run "%comspec% /c echo "&Chr(7), 0, False
Wscript.Sleep wait*1000
Next
End Sub
La subroutine Beep produce n suoni ad una distanza tra loro di "wait" secondi. E' una
delle funzioni disponibili nella libreria che è scaricabile in questo sito. Per ora a noi
interessa il fatto che nei nostri programmi possiamo mettere BEEP e rendere al contempo il
codice più semplice e più leggibile. Ogni volta che scrivo BEEP è come se scrivessi il
codice che c'è tra SUB e END SUB. Da notare che i parametri non sono compresi tra le
parentesi, come invece accade per le Function.
La "funzione" (Function) è una sub che restituisce un risultato.
Prendiamo ad esempio il programa che calcola la somma dei numeri da uno a n. L'abbiamo
visto con i cicli for/next. Ipotizziamo di dover usare più volte questo codice. Lo
mettiamo in una Function che aspetta un numero come parametro per il calcolo.
msgbox calcola(100)
msgbox calcola(345)
msgbox calcola(7570)
Function calcola(n)
'Restituisce la somma dei numeri da uno al parametro n.
Dim i, somma
For i=1 To n
somma=somma+i
Next
calcola=somma 'Questo è il valore restituito dallaFunction
End Function
Quando la funzione termina, il controllo ripassa al programma chiamante. Il contenuto
della variabile "calcola" (che non a caso ha lo stesso nome della funzione) viene
ritornato al programma chiamante. Può essere utilizzato direttamente oppure memorizzato
altrove.
Facciamo anche la conoscenza dell'istruzione DIM. Serve a dichiarare il nome di una
variabile che si utilizzerà successivamente. Non è necessario dichiarare una variabile
prima del suo utilizzo, ma i programmatori veri preferiscono farlo ed elencare in testa al
programma quali sono le variabili che utilizzeranno e magari aggiungere un commento
esplicativo.
Se in testa al programma si utilizza l'istruzione OPTION EXPLICIT, sarà obbligatorio
dichiarare le variabili. Questa istruzione obbliga ad un codice più ordinato e genera un
errore quando si cerca di utilizzare una variabile non dichiarata. Questo significa anche
che un errore di battitura in una variabile sarà subito individuato da VbScript perchè la
variabile non è stata dichiarata. E' molto utile per trovare gli errori nel codice, perchè
senza la dichiarazione OPTION EXPLICIT saremo convinti di usare una variabile mentre da
qualche parte ne stiamo usando una con un nome quasi uguale.
Dichiarare le variabili "i" e "somma" nella nostra Function significa che queste due
variabili vivono solo dentro la Function, sono diverse da eventuali variabili con lo
stesso nome utilizzate nel programma principale e non conservano il loro valore al termine
della Function.
Ecco un esempio che chiarisce la validità delle variabili. La variabile "numero" definita
con DIM all'interno della sub è come se fosse una variabile diversa da quella definita nel
programma principale.
numero=5
msgbox numero 'mostra 5
MostraNumero 'mostra 1
msgbox numero 'mostra 5
Sub MostraNumero
Dim numero
numero=1
msgbox numero
End Sub
L'arma segreta di VbScript: CreateObject
Questo è solo un rimando, perchè l'argomento è vasto e complesso.
Nel registro di Windows sono annotati una lunga serie di "oggetti COM", una sorta di
riferimenti a librerie disponibili sul computer. Un "oggetto", per fare un paragone con
quanto visto finora, è un insieme di subroutine e di funzioni alle quali possiamo accedere
senza la possibilità di modificarle o visualizzarle.
Da un punto di vista più formale, un oggetto è un tipo di dati (come intero, alfanumerico,
a virgola fissa, ecc.) che anzichè permettere un solo valore può accogliere più valori
(chiamati "proprietà", in lettura e/o scrittura), contiene delle procedure (chiamate
"metodi") e può notificare al programma chiamante gli "eventi" che accadono.
Ci sono oggetti molto complessi che possono essere manipolati dall'interno di un programma
VbScript, come Internet Explorer ed Excel. Non tutti i programmi mettono a disposizione
del programmatore un modello ad oggetti che si può utilizzare, ma quando questo è
possibile si aprono enormi orizzonti.
Ad esempio utilizzando Internet Explorer ci si può collegare a siti internet, simulare la
compilazione dei campi, premere sui pulsanti e scaricare file.
Usando Excel si può caricare un foglio (o crearne uno nuovo), estrarne dati, aggiungere
dati, salvare e stampare.
Un oggetto molto importante è il FileSystemObject. C'è una pagina del sito dedicata a
questo oggetto, che serve a manipolare file e cartelle.
Finale (?)
Questi che ho descritto sono gli elementi essenziali di VbScript. Penso che sia
sufficiente per farsi un'idea generale del linguaggio e per decidere se vale la pena
continuare.
Nell'Help scaricabile dal sito Microsoft o da questo sito c'è la descrizione di questi e
di altri argomenti. Ci sono numerose altre funzioni che agiscono sul testo, sui numeri e
anche su variabili contenenti date e ore. Nel momento in cui servono si possono facilmente
approfondire vedendone la sintassi.
Spero che le cinque sere dedicate alla scrittura di questa pagina siano in grado di
accendere in qualcuno la scintilla della passione per la programmazione.
Giovanni Cenati, 12 novembre 2009.
--
Giovanni Cenati (Bergamo, Italy)
Write to "Reventlov" at katamail com
http://digilander.libero.it/Cenati (Esempi e programmi in VbScript)
--