Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
LuigiB;n1946732 ha scritto:Bho ti avevo scritto verso le 15 adesso il moo messaggio non si vede piu....te lo riscrivero adrsso non ho voglia ciao...
Ciao luigiLuigiB;n1946754 ha scritto:bho forse .. non mi pareva che convertissi un numeor alla volta gli passi tutto l'array ..
buone feste anche a te
Option Explicit
Sub Test
Call Scrivi("Questo è lo script Test scelto e lanciato dal chiamante")
End Sub
Sub Main
End Sub
Option Explicit
Includi "Includi c:\"
Sub Main
Call test
End Sub
Option Explicit
Sub Main
Dim aKey ' array delle chiavi per creare gli archivi virtuali
Dim nQArchivi ' quantita degli archivi da creare
Dim nEstrIni ' estrazione dalla quale iniziare a creare le corrispondenti virtuali
Dim nClasseChiave ' classe per la chiave degli archivi
Dim sFileChiavi ' file che memorizza le chiavi per gli n archivi virtuali
Dim aEstAR ' matrice estrazioni archivio reale (Tot,Ruota,Pos)
Dim sDirArcVirt ' directory dove vengono creati gli archivi virtuali
Dim nQDaProc ' quantita di combinazioni da processare di quelle tornate dl metodo
Dim nRitMaxMin,nRitMaxMax ' rang emin e max per accettare il ritmax per estratto sul nuovo archivio prodotto
Dim nRitRelMaxMin,nRitRelMaxMax ' rang emin e max per accettare il ritmax per estratto sul nuovo archivio prodotto
Dim percVarRitMax ' percentuale di variazione +/- per calcolare il range rispetto al ritmax calcolato su archivio reale
Dim nQEstrArcReale ' quantita estrazioni in archivio reale
'nQDaProc = 3 ' le prime tre combinazioni tornate dal metodo
percVarRitMax = 10
nQArchivi = GetQuantitaArchivi
nClasseChiave = ScegliClasse
nEstrIni = ScegliInizio
sDirArcVirt = GetDirectoryAppData & "ArcVirtEnigma\"
nQEstrArcReale = EstrazioniArchivio
If VerificaCoerenza(nQArchivi,nClasseChiave,nEstrIni) Then
' creo la directry dove salvo gli archivi
If CreaDirectory(sDirArcVirt) Then
' legge le estrazioni dell'archivio reale e le mette in memoria
If AlimentaMatriceEst(aEstAR) Then
If FileEsistente( GetFileCfgArchivio(sDirArcVirt,nEstrIni,nClasseChiave,nQArchivi)) = False Then
' se il grupppo di archivi gia esiste non ci serve il raffronto
' sul ritmax e sul ritrela
Call GetRangeMinMaxRitardoMax(percVarRitMax,nEstrIni,nRitMaxMin,nRitMaxMax)
Call GetRangeMinMaxRitardoRelMax(percVarRitMax,nEstrIni,nRitRelMaxMin,nRitRelMaxMax)
End If
Call CreaArchiviVirtuali(nQArchivi,nClasseChiave,nEstrIni,aEstAR,nQEstrArcReale,sDirArcVirt,nRitMaxMin,nRitMaxMax,nRitRelMaxMin,nRitRelMaxMax)
Call ScriviRitMaxPerArchivio(nClasseChiave,nQArchivi,sDirArcVirt,nEstrIni)
End If
End If
End If
End Sub
Function VerificaCoerenza(nQArchivi,nClasseChiave,nEstrIni)
Dim sMsg
If nQArchivi <= 0 Then sMsg = "Specificare la quantita di archivi da creare"
If nClasseChiave <= 4 Then sMsg = "Specificare la classe per le chiavi di generazione"
If nEstrIni <= 0 Then sMsg = "Specificare l'estrazione di partenza per la generazione degli archivi"
If sMsg <> "" Then
MsgBox sMsg,vbCritical
Else
VerificaCoerenza = True
End If
End Function
Function ScegliInizio()
ReDim aV(EstrazioniArchivio)
Dim k
For k = 1 To UBound(aV)
aV(k) = GetInfoEstrazione(k)
Next
ScegliInizio = ScegliOpzioneMenu(aV,1,"Inizio archivio virtuale")
End Function
Function ScegliClasse
ReDim aV(16)
Dim k
For k = 5 To 20
aV(k - 4) = k
Next
ScegliClasse =(ScegliOpzioneMenu(aV,1,"Classe chiavi di generazione")) + 4
End Function
Function GetQuantitaArchivi
GetQuantitaArchivi = Int(InputBox("Quanti archivi virtuali creare ?","Quantita archivi virtuali","25"))
End Function
Function AlimentaMatriceEst(aEst)
' alimenta la matrice con tutte le estrazioni dell'archivio reale
Dim k,r,e,nTot
nTot = EstrazioniArchivio
ReDim aEst(nTot,11,5)
For k = 1 To nTot
ReDim aNumEst(0)
Call GetEstrazioneCompleta(k,aNumEst)
aEst(k,0,0) = DataEstrazione(k,,,"/") & "-" & IndiceAnnuale(k)
For r = 1 To 11
For e = 1 To 5
aEst(k,r,e) = aNumEst(r,e)
Next
Next
Next
AlimentaMatriceEst = nTot > 0
End Function
Function GetFileCfgArchivio(sDirArc,nIdEstrIni,nClasse,nQArc)
GetFileCfgArchivio = sDirArc & "CFG_" & nIdEstrIni & "_" & nClasse & "_" & nQArc & ".dat"
End Function
Function GetFileArchivioVirt(sDirArc,nIdEstrIni,nClasse,nQArc,nIdArc)
GetFileArchivioVirt = sDirArc & "BDV" & FormattaStringa(nIdArc,"00000") & "_" & nClasse & "_" & nIdEstrIni & "_" & nQArc & ".dat"
End Function
Function GetRitardoMaxEstrattoArchivio(nRetNum,nRetRuota,nEstrInizio)
Dim n,r,nRitMax,nMax
ReDim aN(1)
ReDim aR(1)
nRetNum = 0
nRetRuota = 0
For r = 1 To 10
aR(1) = r
If r <> 11 Then
For n = 1 To 90
aN(1) = n
' usare la funzione turbo solo dalla versione 1.5.73
Call StatisticaFormazioneTurbo(aN,aR,1,0,nRitMax,0,0,nEstrInizio,EstrazioniArchivio)
'Call StatisticaFormazione(aN,aR,1,0,nRitMax,0,0,nEstrInizio,EstrazioniArchivio)
If nRitMax > nMax Then
nMax = nRitMax
nRetNum = n
nRetRuota = r
End If
Next
End If
Next
GetRitardoMaxEstrattoArchivio = nMax
End Function
Sub GetRangeMinMaxRitardoMax(PercVariazione,nEstrIni,nRetMin,nRetMax)
Dim nRitMax
Dim nValue,nRetNum,nRetRuota
nRitMax = GetRitardoMaxEstrattoArchivio(nRetNum,nRetRuota,nEstrIni)
nValue = ProporzioneX(PercVariazione,100,nRitMax)
nRetMin = nRitMax - nValue
nRetMax = nRitMax + nValue
Call Scrivi("Ritardo massimo su archivio reale estrazione inizio " & nEstrIni)
Call Scrivi("Sono accettati gli archivi che si discostano del " & PercVariazione & "% rispetto al ritardo sull'archivio reale")
Call Scrivi("Ritardo massimo Min " & nRetMin)
Call Scrivi("Ritardo massimo Max " & nRetMax)
Call Scrivi
ReDim av(3)
av(1) = "Numero"
av(2) = "Ruota"
av(3) = "Ritardo max"
Call InitTabella(av,vbYellow)
av(1) = nRetNum
av(2) = NomeRuota(nRetRuota)
av(3) = nRitMax
Call ***RigaTabella(av)
Call CreaTabella
End Sub
Sub GetRangeMinMaxRitardoRelMax(PercVariazione,nEstrIni,nRetMin,nRetMax)
Dim nRitMax
Dim nValue,nRetNum,nRetRuota
nRitMax = GetRitRelMaxArchivio(nEstrIni,EstrazioniArchivio,nRetNum,nRetRuota)
nValue = ProporzioneX(PercVariazione,100,nRitMax)
nRetMin = nRitMax - nValue
nRetMax = nRitMax + nValue
Call Scrivi("Ritardo relativo massimo su archivio reale estrazione inizio " & nEstrIni)
Call Scrivi("Sono accettati gli archivi che si discostano del " & PercVariazione & "% rispetto al ritardo sull'archivio reale")
Call Scrivi("Ritardo Rel massimo Min " & nRetMin)
Call Scrivi("Ritardo Rel massimo Max " & nRetMax)
Call Scrivi
ReDim av(3)
av(1) = "Numero"
av(2) = "Ruota"
av(3) = "Ritardo rel max"
Call InitTabella(av,vbYellow)
av(1) = nRetNum
av(2) = NomeRuota(nRetRuota)
av(3) = nRitMax
Call ***RigaTabella(av)
Call CreaTabella
End Sub
Function GetRitRelMaxArchivio(Inizio,fine,nRetNumRitRelMax,nRetRuotaRitRelMax)
Dim r,k
ReDim aRuote(1)
Dim nRitRel,nRitRelMax
nRetNumRitRelMax = 0
nRetRuotaRitRelMax = 0
Call Messaggio("Calcolo ritardo relativo massimo")
For r = 1 To 10
aRuote(1) = r
Call InitCalcoloRitRel(aRuote,Inizio,fine)
For k = 1 To 90
nRitRel = GetRitRelMax(k,Inizio + 220,fine)
If nRitRel > nRitRelMax Then
nRitRelMax = nRitRel
nRetNumRitRelMax = k
nRetRuotaRitRelMax = r
End If
Next
Call AvanzamentoElab(1,10,r)
If ScriptInterrotto Then Exit For
Next
GetRitRelMaxArchivio = nRitRelMax
End Function
Function CreaChiave0(nClasse)
Dim k, s
For k = 1 To nClasse
s = s & "0."
Next
CreaChiave0 = RimuoviLastChr(s, ".")
End Function
Sub LeggiChiaviDaFile(sFileChiavi,aKey, nClasse)
Dim k
' legge le chiavi per la creazione degli archivi virtuali
' potrebbe pure non leggere le chiavi se il file non esiste
k = 1
aKey(k) = CreaChiave0(nClasse) ' per creare il primo archivio virtuale identico all'archivio reale
For k = 2 To UBound(aKey)
aKey(k) = ""
Next
If FileEsistente(sFileChiavi) Then
ReDim aRighe(0)
Call LeggiRigheFileDiTesto(sFileChiavi,aRighe)
For k = 0 To UBound(aRighe)
aKey(k + 1) = aRighe(k)
Next
End If
End Sub
Sub MischiaColonna(aCol)
Dim nUpper
Dim nFatti
Dim nPos,nPosOrig
nUpper = UBound(aCol)
ReDim aB(nUpper)
ReDim aNewCol(nUpper)
Do While nFatti < nUpper
nPos = NumeroCasuale(1,nUpper)
Do While aB(nPos)
nPos = NumeroCasuale(1,nUpper)
Loop
aB(nPos) = True
nPosOrig = nPosOrig + 1
aNewCol(nPosOrig) = aCol(nPos)
nFatti = nFatti + 1
Loop
For nPos = 1 To nUpper
aCol(nPos) = aNewCol(nPos)
Next
End Sub
Sub CreaArchiviVirtuali(nQArchivi,nClasseKey,nEstrIni,aEstrArcReale,nQEstrAR,sDirArchivi,nRitMaxMin,nRitMaxMax,nRitRelMaxMin,nRitRelMaxMax)
Dim sFileArc
Dim k,r,e
Dim nQEstrInArcV
Dim idEstrAR,idEstrAV
Dim nPosKey
Dim nn
Dim nSalv
Dim nArcCreati
Dim bCalcRitMax
Dim nTmpNumArc
Dim nRitMax,nRitRelMax
Dim sTmpCol
Dim coll
Dim sFileChiavi
Set coll = GetNewCollection
sFileChiavi = GetFileCfgArchivio(sDirArchivi,nEstrIni,nClasseKey,nQArchivi)
ReDim aKey(nQArchivi)
Call LeggiChiaviDaFile(sFileChiavi,aKey ,nClasseKey)
' aggiorna o crea se non esistono gli archivi virtuali
nArcCreati = 0
Do While nArcCreati < nQArchivi
nSalv = 0
nTmpNumArc = nArcCreati + 1
If aKey(nTmpNumArc) = "" Then
ReDim aCol(0)
Call GetColonnaCasuale(nClasseKey,aCol)
Call MischiaColonna(aCol)
sTmpCol = StringaNumeri(aCol)
Do While ***ItemColl(coll,sTmpCol,"k" & sTmpCol) = False
Call GetColonnaCasuale(nClasseKey,aCol)
Call MischiaColonna(aCol)
sTmpCol = StringaNumeri(aCol)
Loop
aKey(nTmpNumArc) = sTmpCol
bCalcRitMax = True
Else
bCalcRitMax = False
End If
ReDim aNumKey(0)
Call SplitByChar("." & aKey(nTmpNumArc),".",aNumKey)
sFileArc = GetFileArchivioVirt(sDirArchivi,nEstrIni,nClasseKey,nQArchivi,nTmpNumArc)
Call Messaggio("Archivio numero " & nTmpNumArc)
If FileEsistente(sFileArc) Then
If ApriFileBaseDati(sFileArc) Then
nQEstrInArcV = QuantitaEstrazioniInFile(sFileArc)
MsgBox nQEstrInArcV
Else
nQEstrInArcV = 0
End If
Else
nQEstrInArcV = 0
End If
idEstrAV = nQEstrInArcV
' cicla dalla prima estrazione da aggiungere fino a quelle disponibili nell'archivio reale
For idEstrAR =((nEstrIni - 1) + nQEstrInArcV) + 1 To nQEstrAR
idEstrAV = idEstrAV + 1
nPosKey =(idEstrAV Mod nClasseKey) + 1
nn = Int(aNumKey(nPosKey))
ReDim aEstrV(11,5)
For r = 1 To 11
If Int(aEstrArcReale(idEstrAR,r,1)) > 0 Then
For e = 1 To 5
aEstrV(r,e) = Fuori90(Int(aEstrArcReale(idEstrAR,r,e)) + nn)
Next
End If
Next
ReDim aTmp(0)
Call SplitByChar(aEstrArcReale(idEstrAR,0,0),"-",aTmp)
If SalvaEstrazione(aEstrV,aTmp(0),aTmp(1),sFileArc) Then
nSalv = nSalv + 1
Call Messaggio(nSalv)
End If
Next
Call AvanzamentoElab(1,nQArchivi,nTmpNumArc)
If ScriptInterrotto Then Exit Do
If bCalcRitMax Then
If ApriFileBaseDati(sFileArc) Then
Call Messaggio("Calcolo ritardo massimi per estratto su archivio numero " & nTmpNumArc)
nRitMax = GetRitardoMaxEstrattoArchivio(0,0,1)
nRitRelMax = GetRitRelMaxArchivio(1,EstrazioniArchivio,0,0)
If(nRitMax >= nRitMaxMin And nRitMax <= nRitMaxMax) And(nRitRelMax >= nRitRelMaxMin And nRitRelMax <= nRitRelMaxMax) Then
nArcCreati = nArcCreati + 1
Else
Call EliminaFile(sFileArc)
aKey(nTmpNumArc) = ""
Call ResetRitardoRel
End If
End If
Else
nArcCreati = nArcCreati + 1
End If
Loop
Set coll = Nothing
If ScriptInterrotto = False Then
Call EliminaFile(sFileChiavi)
For k = 1 To UBound(aKey)
Call ScriviFile(sFileChiavi,aKey(k),False)
Next
Call CloseAllFileHandle
End If
End Sub
Function GetNumRealeFromVirt(sKey,idEstr,NumVirt)
Dim nPosK,nClasseKey,nn
Dim nRetNum
Dim aNumKey
If IsArray(sKey) Then
aNumKey = sKey
Else
ReDim aNumKey(0)
Call SplitByChar("." & sKey,".",aNumKey)
End If
nClasseKey = UBound(aNumKey)
nPosK =(idEstr Mod nClasseKey) + 1
nn = Int(aNumKey(nPosK))
nRetNum = DiffCiclometrica(NumVirt,nn)
GetNumRealeFromVirt = nRetNum
End Function
Sub ScriviRitMaxPerArchivio(nClasseChiave,nQArchivi,sDirArcVirt,nEstrIni)
Dim k
Dim Inizio,Fine
Dim sFileArc
Dim nRetRitMax,nRetNum,nRetRuota
Dim nRitRelMax
ReDim av(5)
av(1) = "Numero"
av(2) = "Ruota"
av(3) = "Ritardo max"
av(4) = "Rit Rel max"
av(5) = "Archivio num"
Call InitTabella(av,vbYellow)
For k = 1 To nQArchivi
sFileArc = GetFileArchivioVirt(sDirArcVirt,nEstrIni,nClasseChiave,nQArchivi,k)
Call Messaggio("Calcolo ritardi massimi per estratto su archivi ")
If ApriFileBaseDati(sFileArc) Then
nRetRitMax = GetRitardoMaxEstrattoArchivio(nRetNum,nRetRuota,1)
nRitRelMax = GetRitRelMaxArchivio(1,EstrazioniArchivio,0,0)
av(1) = nRetNum
av(2) = NomeRuota(nRetRuota)
av(3) = nRetRitMax
av(4) = nRitRelMax
av(5) = "Arc_" & FormattaStringa(k,"0000")
Call ***RigaTabella(av)
End If
Call AvanzamentoElab(1,nQArchivi,k)
If ScriptInterrotto Then Exit For
Next
Call CreaTabella(3)
End Sub
i legend;n1948416 ha scritto:Ciao luigi
Ho provato a salvare su c dove c'è l icona del cd ma mi dice che non posso.
Ergo non ho potuto verificare lo script.
.