Ciao Filotto , lasciami dire che sono molto soddisfatto.
Devo dirti che c'è ancora qaulche incertezza però nel complesso hai fatto benissimo, bravo !
lo script che hai redatto funziona perfettamente , ci sono però delle cose in più che non servono
probabilmente frutto delle prove che hai fatto , mi fa anche piacere come hai scritto nei commenti ,che quando inserisci un' istruzione dentro un ciclo for questa si ripete , stai capendo come funziona il tutto ..p robabilemte lo hai sperimentato a tue spese
vedendo una sfilza di scritte ripetute.
ti metto lo script come l'ho corretto io
Codice:
Option Explicit
Sub Main
Dim es
es = InputBox("metti il num di estrazione",,9000)
Call ScriviEstrazioneOut(es)
End Sub
Sub ScriviEstrazioneOut(es)
Dim an2(5)'preparo l'array x contenere 5 num.
'Dim es2,r2,p2 'dimensiono le estrazioni la ruota e le posiz
Dim r2,p2
'es2 = 9062' estrazioni mi serve la n° 9062
Scrivi " Estraz. n° " & es & " " & " del " & DataEstrazione(es)' lo metto qui perchè in mezzo al ciclo for me lo ripete !!
For r2 = 1 To 12' Ciclo For delle ruote
If r2 <> 11 Then ' solo nel caso che le ruote che incontri nel ciclo For r = 1 To 12 siano diverse dalla 11 allora me le scrivi
For p2 = 1 To 5 ' Con il CICLO FOR LEGGO LE 5 POSIZIONI
an2(p2) = FormatSpace(Estratto(es,r2,p2),2,True) '... devo usare la funzione " Estratto"
Next 'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an " ......
Scrivi FormatSpace(NomeRuota(r2),11) & " " & StringaNumeri(an2,".") 'faccio scrivere l'array con la funzione "StringaNumeri"
End If ' qui posso chiudere il ciclo if xchè ha fatto quello che doveva fa
Next
End Sub
come puoi vedere la sub ScriviEstrazioneOut l'hai scritta egregiamente , solo che hai abbiondato
nei parametri, alcuni non servivano.
i parametri sono tutte quelle variabili che sono presenti dentro le parentesi nella firma della sub/function
questa riga si chiama firma della sub (perche è una sub se fosse stata una function sarebbe firma della function) , le variabili scritte col colore rosso si chiamano parametri
Codice:
Sub ScriviEstrazioneOut([COLOR=#FF0000]an,es,r,p[/COLOR])
quando chiamo la sub da un alro punto del codice devo passare dei valori per ogni parametro proprio come hai fatto pure tu nel tuo codice nella sub main quando la richiami.
come avrai capito nel momento in cui scrivi la tua sub o function non sai ancora quanto varrà il parametro o i parametri , sai solo che dovranno contenere un certo tipo di valore che la sub si aspetta (si aspetta nel senso che lo hai deciso tu che l'hai scritta quindi sai che cosa dovra contenere quella variabile anche se ancora non sai il valore effettivo) per esempio sai che <es>
dovra contenere il numero dell'estrazione che vuoi scrivere a video, stai ragionando in modo astratto non ti serve saperne il valore pratico.
ok , <es> era l'unico parametro che serviva in questa sub
Fai finta che tu sei la sub e io sia Sub Main e il tuo compito è portarmi lo stampato della tale estrazione quando io te la chiedo.
Di cosa hai bisogno ? Solo del numero ce io voglio quello lo so io che ti chiamo e te lo comunico al momento.Non serve niente altro.
tutte le altre variabili che servono effettivamente alla sub <ScriviEstrazioneOut> sono tutte
variabili che si possono dichiarare localmente
dentro la sub stessa non è necessario metterle nei parametri. torando all'esempio figurato le altre variabili potrebbero essere gli oggetti che tu hai sulla tua scrivania e che ti servono per lavorare , servono a te mica a chi ti chiama...
spero di averti fatto comprendere il senso.
il resto della sub lo hai fatto bene , c'è solo una variabile in piu che non serviva e che ho remmato.
veniamo alla domanda teorica che mi hai posto :
Option Explicit
Option explicit è una
direttiva che s da all'interprete del vbscript
non è una direttiva obbligatoria e si potrebeb omettere , ma attenzione
NON VA OMESSA
cosa fa option explicit ? Impone all'interprete di verificare (prima che lo script venga eseguito)
se tutte le variabili usate siano state dichiarate ESPLICITAMENTE (da qui explicit)
se dopo la verifica ciò non risultasse vero capiterebeb un messaggio di errore come in questo esempio
Codice:
Option Explicit
Sub Main
p = p +1
End Sub
come vedi p non ha nessun < Dim p > quindi dato che è impostata la direttiva Optione Explicit quando premiamo esegui invece di eseguire il codice l'interprete ci manda un messaggio di errore (provalo per vedere)
se levassimio la direttiva lo script si eseguirebbe senza errori perche l'interprete quando incontra qualcosa che non sa cos'è e che corrisponde a certe caratteristiche riesce a capire che si tratta di una variabile , ma attenzione una variabile dichiarata in modo IMPLICITO (ovvero senza Dim)
La prima volta che compare <p> è come se internamente il <dim p >lo facesse da solo senza farlo vedere , però che vuol dire questo ? Che se io nel resto del codice una volta che devo riusare la variabile <p> invece di P scrivo il tasto viciono la <o> o qualsiasi altra cosa perche mi sono sbagliato e non me ne sono accorto l'interprete non mi segnala niente .. pensa che <O> sia un'altra variabile ancora , per lui fila tutto liscio non ha idea di cosa vogliamo fare noi ..
quindi per salvaguardarci dai nostri errori di distrazione Option explicit lo mettiamo sempre.
benissimo ! Siamo arrivati al prossimo step , come ved stiamo partendo proprio dal basso con
esercizi semplicissimi e piano piano la nebbia si dirada.
Il prossimo step è semplice ..direi imbarazzante -- pero serve a focalizzare sulle chiamate alle sub /function
come sai nello spazioscript ci sono un sacco di funzioni precostituite , ora ne useremo una.
Nella tua sub <ScriviEstrazioneOut> per leggere i 5 numeri di ciascuna ruota hai usato
un ciclo for valorizzando di volta in volta gli elementi da 1 a 5 di un vettore , ora il ciclo for
che legge gli estratti dobbiamo levarlo e useremo al suo posto la chiamata ad una sub offerta
dallo spazio script. La sub in questione è GetArrayNumeriRuota
questa sub ti alimenta il vettore dei 5 numeri di una ruota di una tale estrazione
ecco come si usa, anche se ti esorto ad andare a vedere la sua spiegazione (sintetica) nell'hel dello spazio script
Codice:
Option Explicit
Sub Main
ReDim aN(0)
Call GetArrayNumeriRuota ( 8000 ,1,aN)
Call Scrivi (StringaNumeri (aN))
End Sub
tutto ok ? Levare il ciclo for che legge gli estratti e sostituire con l'uso di questa sub.<GetArrayNumeriRuota >
ciao