Novità

Costruzione Guida Script

L

LuigiB

Guest
ciao , quei menu si abilitano solo se sul tuo pc è installato vb6 , in pratica se è presente l'mbiente di sviluppo vb6 un normale script con un semplice click si puo trasformare in un file exe , questo consente sia di farlo eseguire piu velocemente sia di distribuirlo come un programmino separato (rubino ne ha fatti molti ad esempio) , inoltre per chi sa programmare è possibile estendere lo script ad un vero e proprio programma che sfrutta tuttele funzioni script di spaziometria e che puo essere esteso appunto disponendo del vb6.

Ciao
 
Ultima modifica di un moderatore:

xabio

Super Member >GOLD<
GRAZIE .
Salve ragazzi mi associo nel ringraziare in Primis Luigi e tutti gli Scripters esperti che collaborano con molta pazienza nel
seguire noi principianti .
Questa guida e' l'ennesimo ottimo lavoro .
Grazie
Saluti Xabio.
 

rabberto

Advanced Member
Ciao LuigiB non riesco a capire gli ultimi due capitoli sulle classi il numero 7 e il numero 8 , sto cercando di mettere gli script da te fatti sul programma spaziometria per capirci qualcosa ma senza risultato mi da sempre errore , cosa posso fare , dove sbaglio , grazie , ciao.
 

galen

Junior Member
Un grandissimo ringraziamento a Luigi per tutto quello che ci dona.Meravigliosa questa guida,è sempre stato il mio sogno poter fare uno script,spero di riuscirci.Grazie di cuore a Luigi.Galen.
 

Rosanna

Super Member >PLATINUM<
ciao Rosanna , non preoccuparti dedicati alle tue priorità , io ho continuo per non lasciare la cosa in sospeso.
L'ultimo capitolo della guida insieme agli altri l'ho inserito in questo file riepilogativo che li contiene tutti.
La guida con questo ultimo cpitolo si conclude

LezioniSpazioScript.rar

Ciao
scaricato tutto... ho letto rapidamente anche la seconda parte delle classi. Il tutto (classi) andrà studiato con calma. Al momento è nebbia totale...
La cosa in un certo senso mi piace perchè penso alla fatica che fanno i nuovi scripter o futuri scripter ad assimilare i concetti etc. .. ecco... come vi capisco!!!
ma anche a quanto è intrigante imparare qualche cosa di nuovo.

Se non questa settimana, salvo ulteriori complicazioni dei problemi che mi occupano tempo e pensieri, la prossima penso di mandare i file a Domenico... e di
dedicarmi allo studio....perchè ho un po' di giorni di ferie... Al più ti disturbo per farti delle domande. Se sarò invece silenziosa sarà causa forza maggiore...

Grazie
un saluto a tutti
 

lotto_tom75

Advanced Premium Member
Ancora non l'ho letta ma l'ho subito scaricata "al buio". Grazie al mitico LuigiB e a tutti i curatori di questa sicuramente splendida opera! :eek:
 
L

LuigiB

Guest
che servira come combustibile per il prossimo invwerno se gli scripters rimangono quelli che gia sono ...:)
 

stefania1972

Senior Member
Ciao volevo ringraziare di nuovo tutti quelli che hanno contribuito alla costruzione della guida completa e soprattutto spiegata in maniera eccellente , che di sicuro fara' nuovi scripter , grazie ancora a tutti , ciao.
 

Rosanna

Super Member >PLATINUM<
Ho fatto quel lavoretto di controllo errorini di battitura Ho aggiunto una nota presa da una risposta di Luigi sul nome variabili che mi sembra importante e aggiunto un'altra sul ciclo while wend... Sono facilmente riconoscibili ed eventualmente eliminabili... perchè racchiuse in una cella.

Spedito il tutto a Domenico via mail ( i file sono quelli di Luigi per cui mancano gli altri script di esempi), se magari lo gira anche a Luigi... sarebbe meglio.

Io aggiungerei anche il num pagina... poi fate come ritenete più opportuno.

Luigi non essere pessimista. Ti assicuro che leggendo le tue guide ho integrato le cose che sapevo con nuove info o particolari. Sulla programmazione per oggetti non sapevo nulla per cui, è un lavoro utile... e non come combustibile...

ciao

Saluto tutti
 
L

LuigiB

Guest
Ciao Rabberto e grazie Rosanna ,usero questo file per aggiornare la guida inserita nel programma con il prossimo rilascio.
Spero davvero che poosa sorgere quelche nuovo scripter .. c'è bisogno di truppe fresche al fronte perche l'avaguardia (dicasi Mike) sta
incominciando a mostrare il peso della dura battaglia condotta negli ultimi mesi .... :) Ciao
 

Mike58

Advanced Member >PLATINUM PLUS<
Ciao Luigi, grazie della comprensione purtroppo è un pochetto veritiera la tua citazione, ora ne approfitterò per mettere ordine fisico e mentale con la guida script ci sono interessanti cose che mi piacerebbe sviluppare.

ciao e un grazie anche a Rosanna che ogni tanto mi viene in soccorso.
 

rabberto

Advanced Member
Ciao LuigiB
Ciao Rabberto e grazie Rosanna ,usero questo file per aggiornare la guida inserita nel programma con il prossimo rilascio.
Spero davvero che poosa sorgere quelche nuovo scripter .. c'è bisogno di truppe fresche al fronte perche l'avaguardia (dicasi Mike) sta
incominciando a mostrare il peso della dura battaglia condotta negli ultimi mesi .... :) Ciao

Lo spero pure io sto cercando di mettercela tutta , mi sto dedicando anima e cuore ormai non penso piu' a niente solo alle guide , spero un giorno di far parte di quelle truppe fresche di cui abbiamo tanto bisogno , grazie , ciao.
 

Rosanna

Super Member >PLATINUM<
Di nulla. Grazie a voi...

Per LuigiB

Se e quando hai voglia/tempo di rispondere mi farebbe piacere avere qualche dritta su... (per comodità scrivo per punti...):

1) Function. Quanto cambia in termini di prestazioni, creare delle function a parte rispetto al gestire il tutto direttamente nella routine principale?
La mia è una curiosità dovuta anche allo sforzo mentale nella gestione e lettura di blocchi esterni alla sub main.

2) Function: restituiscono un valore. Se io avessi bisogno di più valori? esempio un vettore di dati...? Ieri sera tardi ho fatto un listato con due function banalmente ho pensato di memorizzarli come stringa e poi recuperarli in base al caso... o con left/right o con split, ma esiste un modo migliore?

3) Function: variabili, vettori etc utilizzate nelle function devono sempre essere inizializzate o ogni volta che viene richiamata (la function) è come se partisse da zero, dall'inizio, alias senza valori caricati? Ho avuto questa sensazione... poi ero stanca ed ho chiuso tutto. Dovrei ricontrollare a mente fresca per non scrivere fesserie.
Se così fosse, inizializzare diventa un lavoro inutile o resta buona norma farlo?

4) Option Explicit - dichiarazione e dimensionamento array restituito da Split: Split restituisce un array - nel mio caso con dimensione variabile (in base alla casistica...cioè potevo avere un limite superiore di 2 o 3 o 4 indici). Usando option explicit mi sono resa conto che non sapevo come dichiarare/dimensionare questo array. Dovevo dichiararlo altrimenti mi segnalava errore, ma non potevo dimensionarlo perchè pur mettendo il limite max che potevo avere, mi segnalava errore.
Alla fine ho dichiarato l'array come se fosse una semplice variabile... ma è corretto?

Codice:
Option Explicit
Sub Main
Dim aNum,s

s="1.2.3"
aNum=Split(s, ".")
Scrivi "Da variabile stringa "& s & " a vettore"
Scrivi aNum(0)
Scrivi aNum(1)
Scrivi aNum(2)

End Sub

5) Inizializzazione/azzeramento Array-Split: è da fare o no? la mia sensazione è che non serva, come se Split costruisse di sana pianta il vettore.. oltretutto se scrivo un Erase... mi segnala errore. Mi sfugge qualche cosa?

Lascio qui il listato che è cmq da verificare. E' una prova in alternativa allo script di Mike58 per Desperaux che cercava 3 num in decina naturale con zero sortite nel ciclo (n) precedente... La ricerca della terzina in decina naturale su ruota avviene con due function. Se in una tal es esiste minimo una terzina in decina naturale, mi torna una stringa con la decina e la quantità di numeri trovati (che poi vado a gestire nella routine principale). L'altra function mi restituisce una stringa con i numeri in oggetto( che poi vado a "splittare"....).

Se leggendo trovate errori gentilemente segnalate... (in più ho messo il rit precedente per ambata perchè scrivere che la terzina in oggetto ha frquenza zero mi sembrava superfluo.. ). Non ho confrontato gli output per mancanza di tempo..

Codice:
Option Explicit

Sub Main
'0904_11 Rosanna prova funzione decina naturale x Despereaux

Dim Ini,nCiclo,nDec,nColpi,nCasi,nRit
Dim es,r,p,s ' variabili usate nei cicli for next e per gestire stringhe
Dim aNum,aRu(1),aPosta(1) ' array per numeri, ruote, posta in gioco


'---------------------------- inizializzazioni variabili prima dello scorrimento archivio in esame
nCiclo = 13 ' queste sono le reali estrazioni in esame prima dell'es di rilevazione 3num in decina
nColpi = 20 ' colpi di gioco
Ini = EstrazioneFin - 200
nCasi = 0
aPosta(1) = 1 'posta per ambata
'------------------------------------------------
For es = Ini To EstrazioneFin ' scorro l'archivio da ini all'ultima estrazione in archivio
	For r = 1 To 10 ' scorro le ruote
		'Erase aNum 'inizializzo il vettore num '=== dubbio serve??????? pare di no, se lo lascio dà errore
		
		If VerificaDecNat(es,r) <> "" Then ' se nell'estrazione in esame ci sono almeno 3 numeri della stessa dec nat (vedi Function)
			nDec = CInt(Left(VerificaDecNat(es,r),1))
			s = StringaDecina(es,r,nDec)
			aNum = Split(s,".") ' carico sul vettore i numeri in decina nat passati dalla function
			aRu(1) = r
			nRit = SerieRitardo(1,es - 1,aNum,aRu,1) ' già che ci sono calcolo e poi visualizzo in output il Rit per ambata, precedente la sortita dei 3num in decina		
			If SerieFreq(es - nCiclo,es - 1,aNum,aRu,1) = 0 Then
				nCasi = nCasi + 1
				ColoreTesto 1
				Scrivi DataEstrazione(es) & " " & SiglaRuota(r) & " => " & VerificaDecNat(es,r) & " => " & StringaNumeri(aNum) & " Rit precedente x ambata " & nRit & "--- Caso n° " & nCasi,1
				ColoreTesto 0
				ImpostaGiocata 1,aNum,aRu,aPosta,nColpi,1
				Gioca es
			End If			
		End If
	Next
Next
ScriviResoconto
						
End Sub

Function VerificaDecNat(idEs,idR) ' se presenza di min 3 num in dec naturale restituisco una stringa con la decina naturale . QUANTITA'
	Dim aDecNat(8) ' vettore per memorizzare il numero di numeri trovati
	Dim i,p ' variabili utilizzate nei cicli for next
	
	Erase aDecNat '<== DUBBIO. Serve nella function inizializzare /svuotare l'array??
	
	For p = 1 To 5
		For i = 0 To 8
			If DecinaNaturale(Estratto(idEs,idR,p)) = i Then aDecNat(i) = aDecNat(i) + 1 'conteggio i num x ogni decnat
		Next
	Next
	
	For i = 0 To 8
		If aDecNat(i) > 2 Then VerificaDecNat = i & "." & aDecNat(i) ' assegno la decina naturale PUNTO il numero di num di quella decina
	Next	
	' nb: il numero di numeri trovati può tornare utile qualora si voglia filtrare i casi in base alla presenza (3,4,5)
	' in tal caso si può facilmente recuperare con un banale right...
	' il PUNTO serve solo a migliorare la lettura dei valori
End Function

Function StringaDecina(idEs,idR,idDec)
	Dim nContaDec,nNum,p
	nContaDec = 0
	For p = 1 To 5
		nNum = Estratto(idEs,idR,p)
		If DecinaNaturale(nNum) = idDec Then
			nContaDec = nContaDec + 1
			If nContaDec = 1 Then
				StringaDecina = nNum
			Else
				StringaDecina = StringaDecina & "." & nNum
			End If
		End If		
	Next
End Function

6) Spazioscript: Quando apro SpazioMetria per incollare o scrivere uno script, clicco sul pulsantino "ElaboraScript". Se ho bisogno di un'altra finestra (in contemporanea) per un altro script (es. per confrontare l'output di un altro script, oppure per scrivere un piccolo blocco di istruzioni per mia verifica-studio..) si apre una finestra di edit script che non ha il pulsante di "Elabora". Come posso fare? Cosa sbaglio?

7) Spazioscript percorso aprifile: come posso memorizzare un percorso diverso da quello di default per aprire rapidamente la cartella dove tento tutti i miei script (e che è esterna alle cartelle di Spaziometria)?

Grazie in anticipo... Ciao
 

Rosanna

Super Member >PLATINUM<
Di nulla. Grazie a voi...

Per LuigiB

Se e quando hai voglia/tempo di rispondere mi farebbe piacere avere qualche dritta su... (per comodità scrivo per punti...):

1) Function. Quanto cambia in termini di prestazioni, creare delle function a parte rispetto al gestire il tutto direttamente nella routine principale?
La mia è una curiosità dovuta anche allo sforzo mentale nella gestione e lettura di blocchi esterni alla sub main.

2) Function: restituiscono un valore. Se io avessi bisogno di più valori? esempio un vettore di dati...? Ieri sera tardi ho fatto un listato con due function banalmente ho pensato di memorizzarli come stringa e poi recuperarli in base al caso... o con left/right o con split, ma esiste un modo migliore?

3) Function: variabili, vettori etc utilizzate nelle function devono sempre essere inizializzate o ogni volta che viene richiamata (la function) è come se partisse da zero, dall'inizio, alias senza valori caricati? Ho avuto questa sensazione... poi ero stanca ed ho chiuso tutto. Dovrei ricontrollare a mente fresca per non scrivere fesserie.
Se così fosse, inizializzare diventa un lavoro inutile o resta buona norma farlo?

4) Option Explicit - dichiarazione e dimensionamento array restituito da Split: Split restituisce un array - nel mio caso con dimensione variabile (in base alla casistica...cioè potevo avere un limite superiore di 2 o 3 o 4 indici). Usando option explicit mi sono resa conto che non sapevo come dichiarare/dimensionare questo array. Dovevo dichiararlo altrimenti mi segnalava errore, ma non potevo dimensionarlo perchè pur mettendo il limite max che potevo avere, mi segnalava errore.
Alla fine ho dichiarato l'array come se fosse una semplice variabile... ma è corretto?

Codice:
Option Explicit
Sub Main
Dim aNum,s

s="1.2.3"
aNum=Split(s, ".")
Scrivi "Da variabile stringa "& s & " a vettore"
Scrivi aNum(0)
Scrivi aNum(1)
Scrivi aNum(2)

End Sub

5) Inizializzazione/azzeramento Array-Split: è da fare o no? la mia sensazione è che non serva, come se Split costruisse di sana pianta il vettore.. oltretutto se scrivo un Erase... mi segnala errore. Mi sfugge qualche cosa?

Lascio qui il listato che è cmq da verificare. E' una prova in alternativa allo script di Mike58 per Desperaux che cercava 3 num in decina naturale con zero sortite nel ciclo (n) precedente... La ricerca della terzina in decina naturale su ruota avviene con due function. Se in una tal es esiste minimo una terzina in decina naturale, mi torna una stringa con la decina e la quantità di numeri trovati (che poi vado a gestire nella routine principale). L'altra function mi restituisce una stringa con i numeri in oggetto( che poi vado a "splittare"....).

Se leggendo trovate errori gentilemente segnalate... (in più ho messo il rit precedente per ambata perchè scrivere che la terzina in oggetto ha frquenza zero mi sembrava superfluo.. ). Non ho confrontato gli output per mancanza di tempo..

Codice:
Option Explicit

Sub Main
'0904_11 Rosanna prova funzione decina naturale x Despereaux

Dim Ini,nCiclo,nDec,nColpi,nCasi,nRit
Dim es,r,p,s ' variabili usate nei cicli for next e per gestire stringhe
Dim aNum,aRu(1),aPosta(1) ' array per numeri, ruote, posta in gioco


'---------------------------- inizializzazioni variabili prima dello scorrimento archivio in esame
nCiclo = 13 ' queste sono le reali estrazioni in esame prima dell'es di rilevazione 3num in decina
nColpi = 20 ' colpi di gioco
Ini = EstrazioneFin - 200
nCasi = 0
aPosta(1) = 1 'posta per ambata
'------------------------------------------------
For es = Ini To EstrazioneFin ' scorro l'archivio da ini all'ultima estrazione in archivio
	For r = 1 To 10 ' scorro le ruote
		'Erase aNum 'inizializzo il vettore num '=== dubbio serve??????? pare di no, se lo lascio dà errore
		
		If VerificaDecNat(es,r) <> "" Then ' se nell'estrazione in esame ci sono almeno 3 numeri della stessa dec nat (vedi Function)
			nDec = CInt(Left(VerificaDecNat(es,r),1))
			s = StringaDecina(es,r,nDec)
			aNum = Split(s,".") ' carico sul vettore i numeri in decina nat passati dalla function
			aRu(1) = r
			nRit = SerieRitardo(1,es - 1,aNum,aRu,1) ' già che ci sono calcolo e poi visualizzo in output il Rit per ambata, precedente la sortita dei 3num in decina		
			If SerieFreq(es - nCiclo,es - 1,aNum,aRu,1) = 0 Then
				nCasi = nCasi + 1
				ColoreTesto 1
				Scrivi DataEstrazione(es) & " " & SiglaRuota(r) & " => " & VerificaDecNat(es,r) & " => " & StringaNumeri(aNum) & " Rit precedente x ambata " & nRit & "--- Caso n° " & nCasi,1
				ColoreTesto 0
				ImpostaGiocata 1,aNum,aRu,aPosta,nColpi,1
				Gioca es
			End If			
		End If
	Next
Next
ScriviResoconto
						
End Sub

Function VerificaDecNat(idEs,idR) ' se presenza di min 3 num in dec naturale restituisco una stringa con la decina naturale . QUANTITA'
	Dim aDecNat(8) ' vettore per memorizzare il numero di numeri trovati
	Dim i,p ' variabili utilizzate nei cicli for next
	
	Erase aDecNat '<== DUBBIO. Serve nella function inizializzare /svuotare l'array??
	
	For p = 1 To 5
		For i = 0 To 8
			If DecinaNaturale(Estratto(idEs,idR,p)) = i Then aDecNat(i) = aDecNat(i) + 1 'conteggio i num x ogni decnat
		Next
	Next
	
	For i = 0 To 8
		If aDecNat(i) > 2 Then VerificaDecNat = i & "." & aDecNat(i) ' assegno la decina naturale PUNTO il numero di num di quella decina
	Next	
	' nb: il numero di numeri trovati può tornare utile qualora si voglia filtrare i casi in base alla presenza (3,4,5)
	' in tal caso si può facilmente recuperare con un banale right...
	' il PUNTO serve solo a migliorare la lettura dei valori
End Function

Function StringaDecina(idEs,idR,idDec)
	Dim nContaDec,nNum,p
	nContaDec = 0
	For p = 1 To 5
		nNum = Estratto(idEs,idR,p)
		If DecinaNaturale(nNum) = idDec Then
			nContaDec = nContaDec + 1
			If nContaDec = 1 Then
				StringaDecina = nNum
			Else
				StringaDecina = StringaDecina & "." & nNum
			End If
		End If		
	Next
End Function

6) Spazioscript: Quando apro SpazioMetria per incollare o scrivere uno script, clicco sul pulsantino "ElaboraScript". Se ho bisogno di un'altra finestra (in contemporanea) per un altro script (es. per confrontare l'output di un altro script, oppure per scrivere un piccolo blocco di istruzioni per mia verifica-studio..) si apre una finestra di edit script che non ha il pulsante di "Elabora". Come posso fare? Cosa sbaglio?

7) Spazioscript percorso aprifile: come posso memorizzare un percorso diverso da quello di default per aprire rapidamente la cartella dove tento tutti i miei script (e che è esterna alle cartelle di Spaziometria)?

Grazie in anticipo... Ciao
 
L

LuigiB

Guest
ciao Rosanna , mi fa molto piacere ricevere queste domande e quindi sono altrettanto
contento di rispondere, mi fa piacere perche vedere interesse per questo argomento
che cerco di divulgare mi fa capire che non sia tutto tempo perso il che è gia qualcosa :).

1) Usando delle funzioni/procedure al posto di scrivere tutto in un singolo blocco introduce
sicuramente un piccolo overhead tuttavia l'eventuale perdiata delle performance dipende anche
dal compilatore/interprete usato.
Alcuni compilatori sono maggiormente ottimizzati e producono codice piu veloce , gli script comunque
non sono compilati ma interpretati anche tra gli interpreti c'è chi lavora meglio e chi lavora peggio..
Nel caso del vbscript che gia è lento di suo la cosa secondo me è trascurabile (un mulo è sempre
lento a prescindere ...se uno volesse il cavallo ci vorrebbe un vero ambiente di sviluppo non gli
script).
Comunque il piccolissimo (impercettibile) prezzo che si paga in termini di prestazioni
si guadagna nella chiarezza e nella qualità del codice che si ottiene facendo uso corretto di sub e function.
Ovviamente non è che è per definizione che ogni script debba essere costituito da piu sub/function
Se lo script deve svolgere un compito semplice non è necessario ma in script piu complessi suddividere
in funzioni differenti aiuta a sezionare il problema e a sudduviderlo in tanti piccoli problemini
Ad esempio se in uno script che dopo fatti certi calcoli e d individuati certi numeri da giocare occorre
prima vedere se percaso si siano verificati esiti nelle estrazion precedenti è sicuramente meglio
demandare questo compito ad una function piuttosto che scrivere tutto insieme .. tieni presente che un giorno forse
potresti voler modificare il tuo script e un script scritto bene è molto piu facile da modificare
specie se lo si riguarda dopo qualche mese.

Per toglierti il dubbio vcomunque puoi fare una prova.
Inserisci all'interno del seguente codice prima lo script monoblocco e poi quello che fa uso di eventuali
sub function e constata la differenza in tempo di esecuzione.

Codice:
Option Explicit
Sub Main
	
	Dim tInizio , tTrascorso 
	tInizio = Timer 
	'==============================================
	' qui i mezzo va tutto il codice dello script
	
	
	
	'==============================================
	tTrascorso = Timer - tInizio
	MsgBox "Tempo in secondi : " & tTrascorso
	
End Sub


2) Un esempio è gia nel capitolo che tratta le classi , il modo migiore è semplicemente passare
gia l'array come parametro della funzione , in vbscript ogni variabile e è del tipo variant
il che vuol dire che puo contenere qualisiasi cosa anche un array.
Quindi tu crei un parametro che riceve una variabile e all'uscita della funzione torna
un array valorizzato.
Se noti in questo codice di esempio il risultato che torna la funzione ci serve solo per
vedere se sia andata a buon fine , in realta i dati che ci servono davvero ce li rida dentro al
parametro aRetEstratti

Codice:
Option Explicit
Sub Main
	ReDim aEstratti(0)
	If GetEstrattiRuota(8000,1,aEstratti) Then
		Call Scrivi(StringaNumeri(aEstratti))
	Else
		MsgBox "Estrazione non valida"
	End If
End Sub
Function GetEstrattiRuota(idEstr,Ruota,aRetEstratti)
	Dim k
	ReDim aRetEstratti(5)
	For k = 1 To 5
		aRetEstratti(k) = Estratto(idEstr,Ruota,k)
	Next
	If aRetEstratti(1) > 0 Then
		GetEstrattiRuota = True
	End If
End Function


3) l'esempio precedente sono sicuro che gia ti consentirà di fare un po' di luce su questo tuo dubbio.
Avrai notato/dedotto che tutte el variabili che passiamo alle sub e function possono essere
alterate all'interno della procedura e che esse al loro ritorno hanno il valore che eventualmente
hanno acquisito nella sub/function questo comportamento lo sfruttiamo per farci tornare indietro i valori.

A dire il vero questo è semplicemente il comportamento di default del vb script , per fare in modo
che le variabili all'uscita delle procedure NON risultino alterate bisogna passarle byVal , invece come
dicevo per default esse sono passate byRef e non è necessario specificarlo.
Ad esempio lo script precednte se avesse la dichiarazione della variabile aRetEstratti passata byval
non funzionerebbe , attenzione non è che darebbe errore , è lecito passare le variabili byval solo
non è quello che ci serviva a noi in quel momento ..


Codice:
	Function GetEstrattiRuota(idEstr,Ruota,byval aRetEstratti) ' non fa quello che vorremmo anche se è lecito

	Function GetEstrattiRuota(idEstr,Ruota,byref aRetEstratti) '  fa proprio quello che ci serve in quel caso

	Function GetEstrattiRuota(idEstr,Ruota, aRetEstratti) ' analogo perche byref è il default


4) certo che è corretto o lo dichiaravi come variabile oppure con redim aValori(0) poi ci pensava lui ad
alimentarlo.
Usare Option explicit è la best pratices (come si dice in gergo)

5) Il discorso Dim Redim Erase
In pratica

Se dichiari un vettore con Dim puoi tranquillamente usare Erase , il tuo vettore subira solo l'azzeramento
degli elementi mantenendo il vettore intatto quindi riutilizzabile in chiamate successive.
Se l'array invece lo avessi dichiarato con Redim usare Erase non va bene (se,pre se lo scopo èra solo quello di
cancellare i valori ) infatti in questo caso Erase cancella proprio tutto l'array , ne elimina la referenza in
memoria sicche una chiamatra successiva che ne faccia uso darebbe errore , percio in questo caso se lo scopo
è svuotare solo i valori ma non liberare la memoria allora si ricorre ad una nuova chiamata a Redim se invece
si vogliono liberare risorse perche si sa che l'array ha finito il suuo compito allora si usa Erase.


6) in verita non sbagli niente non è possibile lavorare su piu script in contemporanea o meglio il programma
puo elaborare un solo script alla volta , la finestra edit script che dici tu serve per aprire ed editare
copiare da altri script rispetto a quello eseguibile ma non per eseguirli in contemporanea.

7) dal primo menu fai apri directory dati . nella finestra di risorse del computer fai doppio click
sul file Spaziometria.ini si dovrebbe aprire notepad o qualsiasi altro editor di file di testo.
Vai nel menu cerca e digita la seguente voce <SDIRSCRIPT=> senza i simboli di <> che sono solo dei delimitatori
appena trovi la riga che la contienee sostituisci il percorso a destra del simbolo = con quello che vuoi tu




Ciao ! :)
 
L

LuigiB

Guest
ciao Rosanna , mi fa molto piacere ricevere queste domande e quindi sono altrettanto
contento di rispondere, mi fa piacere perche vedere interesse per questo argomento
che cerco di divulgare mi fa capire che non sia tutto tempo perso il che è gia qualcosa :).

1) Usando delle funzioni/procedure al posto di scrivere tutto in un singolo blocco introduce
sicuramente un piccolo overhead tuttavia l'eventuale perdiata delle performance dipende anche
dal compilatore/interprete usato.
Alcuni compilatori sono maggiormente ottimizzati e producono codice piu veloce , gli script comunque
non sono compilati ma interpretati anche tra gli interpreti c'è chi lavora meglio e chi lavora peggio..
Nel caso del vbscript che gia è lento di suo la cosa secondo me è trascurabile (un mulo è sempre
lento a prescindere ...se uno volesse il cavallo ci vorrebbe un vero ambiente di sviluppo non gli
script).
Comunque il piccolissimo (impercettibile) prezzo che si paga in termini di prestazioni
si guadagna nella chiarezza e nella qualità del codice che si ottiene facendo uso corretto di sub e function.
Ovviamente non è che è per definizione che ogni script debba essere costituito da piu sub/function
Se lo script deve svolgere un compito semplice non è necessario ma in script piu complessi suddividere
in funzioni differenti aiuta a sezionare il problema e a sudduviderlo in tanti piccoli problemini
Ad esempio se in uno script che dopo fatti certi calcoli e d individuati certi numeri da giocare occorre
prima vedere se percaso si siano verificati esiti nelle estrazion precedenti è sicuramente meglio
demandare questo compito ad una function piuttosto che scrivere tutto insieme .. tieni presente che un giorno forse
potresti voler modificare il tuo script e un script scritto bene è molto piu facile da modificare
specie se lo si riguarda dopo qualche mese.

Per toglierti il dubbio vcomunque puoi fare una prova.
Inserisci all'interno del seguente codice prima lo script monoblocco e poi quello che fa uso di eventuali
sub function e constata la differenza in tempo di esecuzione.

Codice:
Option Explicit
Sub Main
	
	Dim tInizio , tTrascorso 
	tInizio = Timer 
	'==============================================
	' qui i mezzo va tutto il codice dello script
	
	
	
	'==============================================
	tTrascorso = Timer - tInizio
	MsgBox "Tempo in secondi : " & tTrascorso
	
End Sub


2) Un esempio è gia nel capitolo che tratta le classi , il modo migiore è semplicemente passare
gia l'array come parametro della funzione , in vbscript ogni variabile e è del tipo variant
il che vuol dire che puo contenere qualisiasi cosa anche un array.
Quindi tu crei un parametro che riceve una variabile e all'uscita della funzione torna
un array valorizzato.
Se noti in questo codice di esempio il risultato che torna la funzione ci serve solo per
vedere se sia andata a buon fine , in realta i dati che ci servono davvero ce li rida dentro al
parametro aRetEstratti

Codice:
Option Explicit
Sub Main
	ReDim aEstratti(0)
	If GetEstrattiRuota(8000,1,aEstratti) Then
		Call Scrivi(StringaNumeri(aEstratti))
	Else
		MsgBox "Estrazione non valida"
	End If
End Sub
Function GetEstrattiRuota(idEstr,Ruota,aRetEstratti)
	Dim k
	ReDim aRetEstratti(5)
	For k = 1 To 5
		aRetEstratti(k) = Estratto(idEstr,Ruota,k)
	Next
	If aRetEstratti(1) > 0 Then
		GetEstrattiRuota = True
	End If
End Function


3) l'esempio precedente sono sicuro che gia ti consentirà di fare un po' di luce su questo tuo dubbio.
Avrai notato/dedotto che tutte el variabili che passiamo alle sub e function possono essere
alterate all'interno della procedura e che esse al loro ritorno hanno il valore che eventualmente
hanno acquisito nella sub/function questo comportamento lo sfruttiamo per farci tornare indietro i valori.

A dire il vero questo è semplicemente il comportamento di default del vb script , per fare in modo
che le variabili all'uscita delle procedure NON risultino alterate bisogna passarle byVal , invece come
dicevo per default esse sono passate byRef e non è necessario specificarlo.
Ad esempio lo script precednte se avesse la dichiarazione della variabile aRetEstratti passata byval
non funzionerebbe , attenzione non è che darebbe errore , è lecito passare le variabili byval solo
non è quello che ci serviva a noi in quel momento ..


Codice:
	Function GetEstrattiRuota(idEstr,Ruota,byval aRetEstratti) ' non fa quello che vorremmo anche se è lecito

	Function GetEstrattiRuota(idEstr,Ruota,byref aRetEstratti) '  fa proprio quello che ci serve in quel caso

	Function GetEstrattiRuota(idEstr,Ruota, aRetEstratti) ' analogo perche byref è il default


4) certo che è corretto o lo dichiaravi come variabile oppure con redim aValori(0) poi ci pensava lui ad
alimentarlo.
Usare Option explicit è la best pratices (come si dice in gergo)

5) Il discorso Dim Redim Erase
In pratica

Se dichiari un vettore con Dim puoi tranquillamente usare Erase , il tuo vettore subira solo l'azzeramento
degli elementi mantenendo il vettore intatto quindi riutilizzabile in chiamate successive.
Se l'array invece lo avessi dichiarato con Redim usare Erase non va bene (se,pre se lo scopo èra solo quello di
cancellare i valori ) infatti in questo caso Erase cancella proprio tutto l'array , ne elimina la referenza in
memoria sicche una chiamatra successiva che ne faccia uso darebbe errore , percio in questo caso se lo scopo
è svuotare solo i valori ma non liberare la memoria allora si ricorre ad una nuova chiamata a Redim se invece
si vogliono liberare risorse perche si sa che l'array ha finito il suuo compito allora si usa Erase.


6) in verita non sbagli niente non è possibile lavorare su piu script in contemporanea o meglio il programma
puo elaborare un solo script alla volta , la finestra edit script che dici tu serve per aprire ed editare
copiare da altri script rispetto a quello eseguibile ma non per eseguirli in contemporanea.

7) dal primo menu fai apri directory dati . nella finestra di risorse del computer fai doppio click
sul file Spaziometria.ini si dovrebbe aprire notepad o qualsiasi altro editor di file di testo.
Vai nel menu cerca e digita la seguente voce <SDIRSCRIPT=> senza i simboli di <> che sono solo dei delimitatori
appena trovi la riga che la contienee sostituisci il percorso a destra del simbolo = con quello che vuoi tu




Ciao ! :)
 

Rosanna

Super Member >PLATINUM<
Grazie INFINITE...

Punti 1,2,3 ok... !!!
4 ok ma poi faccio altre prove
5 sì avevo letto il discorso Dim Redim Erase che per me era nuovo ma intendevo altro. Poi mi spiego meglio
6 Ok capito. In realtà con altro programma potevo aprire più editor e quindi passare da uno script all'altro.. Cosa che usavo spesso quando da tapina
non sapevo più a che santo raccomandarmi... Provare a parte un piccolo blocco su cui si hanno dei dubbi per me è sempre stato fondamentale.
Non chiedo modifiche se è così ma ti confesso che un po' mi manca..
7 ok poi provo.

ciao
 
L

LuigiB

Guest
ciao Rosanna , per il punto 6 potrei pure farla la modifica ma gli script si potranno eseguire sempre e solo uno alla volta , cioe mandare 2 script in esecuzione coontemporanea richiederebbe delle modifiche sostanziali , invece dare la possibilita di aprire n finestre in cui lo script oltre ad esere modificabile sia pure eseguibile tutto somato posso farlo ..nella prossima versione cliccando il pulsantino degli script si aprira sempre una nuova finestra solo che se uno script è in esecuzione non sarà possibile mandare in esecuzione pure quell'altro ..
 

Ultima estrazione Lotto

  • Estrazione del lotto
    giovedì 28 marzo 2024
    Bari
    49
    73
    67
    86
    19
    Cagliari
    64
    36
    37
    02
    04
    Firenze
    66
    27
    44
    90
    17
    Genova
    09
    44
    78
    85
    19
    Milano
    70
    14
    47
    38
    27
    Napoli
    80
    29
    28
    45
    39
    Palermo
    54
    59
    78
    47
    62
    Roma
    17
    22
    49
    52
    88
    Torino
    71
    35
    75
    74
    60
    Venezia
    40
    84
    02
    63
    29
    Nazionale
    08
    13
    44
    69
    85
    Estrazione Simbolotto
    Firenze
    06
    35
    16
    18
    05

Ultimi Messaggi

Alto