Ciao Tom.
Se inserisci lo script completo (anche in posta) che vedo un tantino arzigogolato, posso capire il tutto, diversamente fermati alla specifica richiesta se con le indicazioni sottostanti non risolvi.
Provo a darti alcuni suggerimenti utili anche x chi vuole approfondire questo argomento.
( sappiate che non ho particolari lauree ma quando spesso mi trovo in difficoltà vado a cercarmi le soluzioni nell'help del programma dove trovo anche il link alla "Documentazione ufficiale di VBScript)
premessa
- le array(x) sono matrici ad unica dimensione ed a base 0 cioè possono contenere (x) valori più il valore in posizione 0 quindi un totale di x+1 valori,
con Dim la si dimensiona ad un valore fisso, con ReDim la si rende a dimensione variabile.
- se vuoi solo ridimensionare una array -> usa redim nomearray( ) cambiando il valore nella parentesi
- se vuoi ridimensionarla mantenendo i valori esistenti devi usare il redim Preverse nomearray.... ( nel caso la ampli, si incrementano le posizioni utilizzabili, in caso di diminuizione si riducono le posizioni mantenendo solo i valori sino alla posizione specificata, i restanti valori vengono perduti).
Riguardo alle modifiche dei contenuti della array:
- se vuoi svuotare una array ( che sia fissa o variabile) dei valori contenuti e riempirla dei nuovi valori, devi azzerare i suoi valori ciclando le posiz e dando ad esse il valore desiderato o =0
for x = 1 to ubound(nome array)
nomearray(x)=0
next
(la base 0 non ha alcun valore, se non è mai stata utilizzata nel costrutto precedente, personalmente la utilizzo x inserire i titoli della array o della matrice);
oppure,
con Erase su matrice numerica fissa vengono impostati = 0 tutti gli elementi interni, mentre su matrice dinamica
l'Istruzione Erase rende disponibile la memoria utilizzata dalle matrici, però prima che il programma faccia di nuovo riferimento alla matrice dinamica, bisogna dichiarare di nuovo le dimensioni della variabile matrice utilizzando l'istruzione ReDim.
Spero di essere stato esaustivo per la soluzione della tua impasse.
Saluti.
Ps: vi ricordo che nel costruire le funzioni di ordinamento matrici, Luigi escluse l'elemento "0" quindi vi consiglio di non usarlo per dati o valori eventualmente da ordinare.
Grazie claudio, questi modi credo di averli già provati (anche se sicuramente male...) tutti ma senza risultato sperato
Ti posto qui sotto l'intera SUB relativa al problema... (lo script intero è lunghissimo, working in progress e apporterebbe comunque solo ulteriore confusione)
Codice:
Sub AnalisiLunghetteFromSceglinumeriConNumeriFissi(Inizio,Fine,aRuote,Sorte,idFiltro,qIncr,bPrimaEstrFissa,nDistanza)
Dim nTotLunghette
Dim k,sChrSep,nClasse,sNumReal
'----------------------------
Dim aNumeri,aFissi ', nClasse,nSorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq
'Dim k,i
Dim RuoteSelezionate,QuantitaNumeriScelti
Dim MS,aRetCol
ReDim aFissi(7)
Dim i
Dim numfissoagirare,numfissoagirare2,numfissoagirare3,numfissoagirare4,numfissoagirare5,numfissoagirare6,numfissoagirare7,numfissoagirare8,numfissoagirare9,numfissoagirare10
Dim numfissoagirare11,numfissoagirare12,numfissoagirare13,numfissoagirare14,numfissoagirare15,numfissoagirare16,numfissoagirare17,numfissoagirare18,numfissoagirare19,numfissoagirare20
ReDim aLunghette(0)
Dim clsL,collLunghette,FiltroEsaminato
Dim Valorestringa
ReDim aRetCol(0)
ReDim aRetColintermedio(0)
Dim Stringacasuali,Stringaformazionefull
Stringacasuali=""
Stringaformazionefull=""
Call Pulisci(aRetCol)
Call Pulisci(aRetColintermedio)
'Chiedi quanti numeri fissi si desidera avere nelle formazioni elaborate (max 7)
Dim quantinumfissi
quantinumfissi = CInt(InputBox("quanti numeri fissi a girare vuoi? [Max 20 num. fissi]: ",,5))
Set collLunghette = GetNewCollection
FiltroEsaminato = ScriviFiltro(idFiltro)
sChrSep = " "
Call ScegliNumeri(aLunghette)
nClasse = CInt(InputBox(" classe sviluppo ",,7))
Dim Modalitadisviluppo
Modalitadisviluppo = 1 'CInt(InputBox(" modalità di sviluppo? Integrale (0) o Random (1) ",,1))
Dim aN,Av,aNum
' MODALITA' SVILUPPO DI TIPO INTEGRALE...
If Modalitadisviluppo = 0 Then
Call Scrivi ("in questa versione la modalità integrale è disattivata")
'-------------------- FINE MODALITA' SVILUPPO DI TIPO INTEGRALE ----------------------
Else If Modalitadisviluppo = 1 Then
' MODALITA' SVILUPPO DI TIPO RANDOM.... ---------------------------------------------------
Select Case quantinumfissi
Case 5 'iniziamo la sperimentazione con lo sviluppo random di 5 FISSI
'ReDim aRetCol(0)
'ReDim aRetColintermedio(0)
Call Messaggio("hai scelto 5 num. fissi")
QuantitaNumeriScelti = ScegliNumeri(Av)
Dim iv
Scrivi "verifica contenuto av "
For iv = 0 To UBound(Av)
'Scrivi Av(iv)
Next
aFissi = Array(0,Av(1),Av(2),Av(3),Av(4),Av(5))',Av(6),Av(7),Av(8),Av(9),Av(10),Av(11),Av(12),Av(13))
Valorestringa = StringaNumeri(aFissi,,True)
'prova sviluppo di tipo random
Dim Valoreinizioelaborazione,Valorefineelaborazione,Classe,nSorte
Valoreinizioelaborazione = 1
Valorefineelaborazione = 500000 'es: 10 milioni di colonne
'Classe = 19
'nSorte = 2
Dim ar1,ar2,x
'ar1 = Array("0.")
ar2 = array_push(aLunghette,StringaNumeri(aFissi))
Dim nuovastringa
'Call Scrivi("ar2 è ok? " & ar2(0) & ar2(1))
Dim vs,idx
vs = ""
For idx = 0 To UBound(ar2)
vs = vs & CStr(ar2(idx))
'Scrivi vs
Next
Dim vettorediverifica
Call SplitByChar(vs,".",vettorediverifica)
Dim ix
For ix = 0 To UBound(vettorediverifica)
'Scrivi vettorediverifica(ix)
Next
'Dim aRetColintermedio
Dim Classedifferenza
Classedifferenza = 2 'Classe-UBound(aFissi)
For i = Valoreinizioelaborazione To Valorefineelaborazione
'prima di ogni elaborazione inizializzo array formazione ibrida
'ReDim aRetCol(0)
'ReDim aRetColintermedio(0)
Call Pulisci(aRetCol)
Call Pulisci(aRetColintermedio)
'Call Pulisci(aRetColOK)
'Dim Stringacasuali,Stringaformazionefull
Scrivi
Scrivi "------------- prima di getcolonnacasuale ------------------------"
Call Scrivi ("Adesso aretcolOK è " & StringaNumeri(aRetCol))
Call Scrivi ("Adesso aretcol è " & StringaNumeri(aRetCol))
Call Scrivi ("Adesso aretcolintermedio è " & StringaNumeri(aRetColintermedio))
Call Scrivi ("Adesso stringacasuali è " & Stringacasuali)
Call Scrivi ("Adesso stringaformazionefull è " & Stringaformazionefull)
Scrivi "------------- ------------------------------------------- ------------------------"
Scrivi
Call GetColonnaCasuale(Classedifferenza,aRetColintermedio,aLunghette) ' genera i restanti numeri rispetto i numeri fissi
Stringacasuali = StringaNumeri(aRetColintermedio)
'Call Scrivi(" pezzo con elementi casuali " & Stringacasuali)
'Dim nuovoarrayxgenerarelunghetteconifissivoluti
aRetCol = array_push(Av,Stringacasuali)
Stringaformazionefull = StringaNumeri(aRetCol)
Dim aRetColOK
Call SplitByChar(Stringaformazionefull,".",aRetColOK)
Scrivi
Scrivi "------------- dopo creazione aRetColOK ------------------------"
Call Scrivi ("Adesso aretcolOK è " & StringaNumeri(aRetColOK))
Call Scrivi ("Adesso aretcol è " & StringaNumeri(aRetCol))
Call Scrivi ("Adesso aretcolintermedio è " & StringaNumeri(aRetColintermedio))
Call Scrivi ("Adesso stringacasuali " & Stringacasuali)
Call Scrivi ("Adesso stringaformazionefull è " & Stringaformazionefull)
Scrivi "------------- ------------------------------------------- ------------------------"
Scrivi
'Call Scrivi ("Adesso aretcolOK è " & StringaNumeri(aRetColOK))
'Call Scrivi(" pezzo con elementi casuali e fissi " & Stringaformazionefull) ' verifica formazione generata con i fissi voluti più gli altri elementi a girare...
'azzero stringhe...
'Call Pulisci(aRetCol)
'Call Pulisci(aRetColintermedio)
'aRetCol = Array(nuovoarrayxgenerarelunghetteconifissivoluti)
'Do While GetCombSviluppo(aRetCol)
Call Messaggio("R: " & i & " N.F.(i): " & Av(0) & "-" & Av(1) & "-" & Av(2) & "-" & Av(3) & "-" & Av(4) & "-" & Av(5) & " C: " & nClasse & " L.R.T. " & Valorefineelaborazione & " V: " & collLunghette. count & " sorte " & Sorte)
i = i + 1
ReDim aRuoteTmp(1)
'For k = 1 To RuoteSelezionate
'Dim aRuoteTmp
Dim RetRit1,RetRitMax,RetIncrRitMax,RetFreq
aRuoteTmp(1) = 2
Call StatisticaFormazioneTurbo(aRetColOK,aRuoteTmp,Sorte,RetRit1,RetRitMax,RetIncrRitMax,RetFreq)
Call Scrivi (" formazione creata e analizzata ad ogni passaggio " & StringaNumeri(aRetColOK) )
'azzero stringhe
Stringacasuali=""
Stringaformazionefull=""
Call Pulisci(aRetCol)
Call Pulisci(aRetColintermedio)
Call Pulisci(aRetColOK)
Call SplitByChar(Stringaformazionefull,".",aRetColOK)
Call Scrivi (" formazione risultante dopo azzeramento stringhe ad ogni passaggio " & Stringaformazionefull )
Call Scrivi ("Adesso dopo azzeramento stringhe aretcolOK è " & StringaNumeri(aRetColOK))
Call Scrivi ("Adesso dopo azzeramento stringacasuali è " & Stringacasuali)
Dim Diff
Diff = RetRitMax - RetRit1
Dim rapportoRARS
'rapportoRARS = RetRit1/RetRitMax
'Next ' x ruote...
'If ScriptInterrotto Then Exit Do
k = k + 1
Set clsL = New clsLunghetta
Call clsL.Init(aRetCol,sChrSep,Inizio,Fine,aRuote,Sorte)
If clsL.IsCondizioneRispettata(idFiltro,qIncr) Then
Call clsL.EseguiStatistica
collLunghette.Add clsL
End If
If k Mod 50 = 0 Then
Call Messaggio("Riga: " & k & " valide " & collLunghette. count & " num fisso: " & numfissoagirare)
If collLunghette.count > 0 Then
Call Messaggio("Trovata!")
End If
'DoEventsEx
'Call AvanzamentoElab(1,aRetCol,k)
'If ScriptInterrotto Then Exit Do
End If
'Loop
'Set MS = Nothing
Call AvanzamentoElab(1,Valorefineelaborazione,i)
If ScriptInterrotto Then Exit For
'dopo aver analizzato ogni formazione "ibrida" formata da fissi e casuali la debbo azzerrare...
'ReDim aRetCol(0)
ReDim aRetCol(0)
ReDim aRetColintermedio(0)
Call Pulisci(aRetCol)
Call Pulisci(aRetColintermedio)
Stringacasuali=""
Stringaformazionefull=""
Next ' x valore eleborazione...
Call Scrivi
Call Scrivi("Tempo trascorso " & TempoTrascorso)
End Select
'--------------------- FINE MODALITA' SVILUPPO DI TIPO RANDOM -------------------------
End If
End If
'----------------------------blocco report finale uguale per tutti i casi----------------------------
Call Scrivi
Call Scrivi("Elaborazione effettuata con archivio lotto aggiornato all'estrazione del: " & giorno(EstrazioneFin) & "-" & Mese(EstrazioneFin) & "-" & Anno(EstrazioneFin))
Call Scrivi
Scrivi "Range analisi : " & GetInfoEstrazione(Inizio) & " - " & GetInfoEstrazione(Fine)
Scrivi "Filtro Esaminato : " & FiltroEsaminato
Scrivi "Classe di sviluppo : " & nClasse
Scrivi "Numero(i) fisso(i) scelto(i) : " & Valorestringa
Scrivi "Lunghette Totali In Esame : " & nTotLunghette
Scrivi "Lunghette esaminate : " & i & " Valide : " & collLunghette.count
Scrivi "Sorte : " & NomeSorte(Sorte)
Scrivi "Ruote : " & StringaRuote(aRuote)
Scrivi "Numero Minimo IncrRit : " & Format2(qIncr)
Scrivi
Scrivi FormatSpace("Lunghette ordinate per incremento ritardo max",75),True,True,RGB(25,89,76),vbWhite
Call Scrivi
If collLunghette.count > 0 Then
Call OrdinaItemCollection(collLunghette,"IncrRitMax",,,- 1)
For Each clsL In collLunghette
If nDistanza = 0 Then
Call Scrivi("Numeri Formazione : " & clsL.LunghettaString)
Else
sNumReal = clsL.TrasformaArrayNumVirToNumReal(nDistanza,bPrimaEstrFissa)
Call Scrivi("Numeri Formazione : " & clsL.LunghettaString & " " & "Numeri Verifica : " & sNumReal)
End If
Call Scrivi("Ritardo : " & clsL.Ritardo)
Call Scrivi("RitMax : " & clsL.RitardoMax)
Call Scrivi("Freq : " & clsL.Frequenza)
Call Scrivi("IncrRitMx : " & clsL.IncrRitMax)
Call Scrivi("IncrRitMaxSto : " & clsL.IncrRitMaxSto)
Call Scrivi("strIncrementi : " & clsL.strIncRitMaxSto)
Call Scrivi("Numero Incrementi : " & clsL.iNumIncrementi)
Call clsL.DisegnaGraficoIncrRitMax
Next
Else
Scrivi "Nessuna lunghetta rispetta le condizioni"
Scrivi "Lunghette esaminate " & nTotLunghette
End If
Scrivi
Scrivi("Tempo trascorso: " & TempoTrascorso)
End Sub
Guarda se riesci tu ad azzerare lo stramaledettissimo array dinamico "ibrido".
Sicuramente, come al mio solito sto annegando in una bacinella d'acqua..., ma per adesso non riesco proprio a uscirne... ?????
Questo sottostante è un pezzo dell'ultimo OUTPUT descrittivo del problema...
In carattere barrato ti ho riportato gli elementi che non dovrebbero esserci...
Archivio : Archivio lotto
verifica contenuto av
------------- prima di getcolonnacasuale ------------------------
Adesso aretcolOK è
Adesso aretcol è
Adesso aretcolintermedio è
Adesso stringacasuali è
Adesso stringaformazionefull è
------------- ------------------------------------------- ------------------------
------------- dopo creazione aRetColOK ------------------------
Adesso aretcolOK è 17.22.50.51.84.30.87
Adesso aretcol è 17.22.50.51.84.30.87
Adesso aretcolintermedio è 30.87
Adesso stringacasuali 30.87
Adesso stringaformazionefull è 17.22.50.51.84.30.87 fin qui... OK
------------- ------------------------------------------- ------------------------
formazione creata e analizzata ad ogni passaggio 17.22.50.51.84.30.87
formazione risultante dopo azzeramento stringhe ad ogni passaggio
Adesso dopo azzeramento stringhe aretcolOK è
Adesso dopo azzeramento stringacasuali è
------------- prima di getcolonnacasuale ------------------------
Adesso aretcolOK è
Adesso aretcol è
Adesso aretcolintermedio è
Adesso stringacasuali è
Adesso stringaformazionefull è
------------- ------------------------------------------- ------------------------
------------- dopo creazione aRetColOK ------------------------
Adesso aretcolOK è 17.22.50.51.84.
30.87.46.48
Adesso aretcol è 17.22.50.51.84.
30.87.46.48
Adesso aretcolintermedio è 46.48
Adesso stringacasuali 46.48
Adesso stringaformazionefull è 17.22.50.51.84.
30.87.46.48
------------- ------------------------------------------- ------------------------
formazione creata e analizzata ad ogni passaggio 17.22.50.51.84.
30.87.46.48
formazione risultante dopo azzeramento stringhe ad ogni passaggio
Adesso dopo azzeramento stringhe aretcolOK è
Adesso dopo azzeramento stringacasuali è
------------- prima di getcolonnacasuale ------------------------
Adesso aretcolOK è
Adesso aretcol è
Adesso aretcolintermedio è
Adesso stringacasuali è
Adesso stringaformazionefull è
------------- ------------------------------------------- ------------------------
------------- dopo creazione aRetColOK ------------------------
Adesso aretcolOK è 17.22.50.51.84.
30.87.46.48.18.58
Adesso aretcol è 17.22.50.51.84.
30.87.46.48.18.58
Adesso aretcolintermedio è 18.58
Adesso stringacasuali 18.58
Adesso stringaformazionefull è 17.22.50.51.84.
30.87.46.48.18.58
------------- ------------------------------------------- ------------------------
formazione creata e analizzata ad ogni passaggio 17.22.50.51.84.
30.87.46.48.18.58
formazione risultante dopo azzeramento stringhe ad ogni passaggio
Adesso dopo azzeramento stringhe aretcolOK è
Adesso dopo azzeramento stringacasuali è
------------- prima di getcolonnacasuale ------------------------
Adesso aretcolOK è
Adesso aretcol è
Adesso aretcolintermedio è
Adesso stringacasuali è
Adesso stringaformazionefull è
------------- ------------------------------------------- ------------------------
------------- dopo creazione aRetColOK ------------------------
Adesso aretcolOK è 17.22.50.51.84.
30.87.46.48.18.58.6.55
Adesso aretcol è 17.22.50.51.84.
30.87.46.48.18.58.6.55
Adesso aretcolintermedio è 6.55
Adesso stringacasuali 6.55
Adesso stringaformazionefull è 17.22.50.51.84.
30.87.46.48.18.58.6.55
------------- ------------------------------------------- ------------------------
Nell'esempio soprastante in sostanza la classe anzichè restare di 7 elementi con i 5 fissi e i due random a girare... arriva ad essere di 13 elementi e continua a crescere ad ogni pasaggio di due elementi (quelli della classe differenza random) alla volta....