Newsgroup: it.comp.os.dos
Titolo: Lezioni Windows Script Host

Ma Franz ArTiglio sta preparando la terza lezione come diceva lo scorso maggio?
Perch� io 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.
Giovanni
-- 
Giovanni Cenati (Bergamo, Italy)
Write to "Reventlov" at katamail com
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
-- 

 Giovanni
Ciao!
Ciao!
Vedo che nessuno risponde qui, ma allora voglio incoraggiarti io a farlo!
metti metti!
e anche sul tuo sito!
inoltre volevo chiedere: ma queste di Franz Artiglio a cui fai riferimento 
dove si possono trovare?
ciao! 


http://snipurl.com/tzrr1
Message-ID: 48d8385c$0$1088$
4faf...@reader1.news.tin.it
Ciao!! 

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.


 
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
Grazie Giovanni!
se ti si mandano commenti li vuoi sul NG o sulla mail katamail? (wow, esiste 
ancora, non lo sapevo!!! ne avevo una ma... temevo troppo che sparisse) 

ancora, non lo sapevo!!! ne avevo una ma... temevo troppo che sparisse) 
Se non ti scoccia scrivimi in privato, perch� sono permaloso e perch� qui sono discussioni
che non interessano.
Parlare di VbScript su questo newsgroup era un tentativo di movimentare un po' il
traffico, anche se � un argomento fuori tema.
Grazie.
Giovanni
-- 
Giovanni Cenati (Bergamo, Italy)
Write to "Reventlov" at katamail com
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
-- 

 movimentare un po' il traffico, anche se � un argomento fuori tema.
ok.
dunque i batch sono fuori tema su m$.public.it.scripting e cos� dovrebbe 
esserlo powershell (ma qualcuno dice di no), wsh sembrerebbe essere in tema 
l�, ma qui no.
sembrerebbe che il batch tradizionale sia in tema qui ... anche se in 
effetti quello che *oggi* chiamiamo "dos" � solo "CMD".
io modificherei il manifesto, ci farei entrare queste cose... anche se vedo 
che c'� it-alt.comp.os.win.scripting ... e forse li sono IT tutte assieme! 
:)
che ne dici?
cmq ok allora sappiamo che se qualcuno vuol mandarti feedback lo far� in 
privato.
grazie ancora.