Novità

E' possibile dinamicizzare una call function progressiva...?

lotto_tom75

Advanced Premium Member
Cerco di spiegarmi meglio... ?

Ho diverse call per rispettive function che richiamano a loro volta alcuni parametri "dinamicizzabili" con lo stesso numero progressivo del tipo:

Sub AnalisiLunghetteFromSceglinumeri15 (Inizio,Fine,aRuote15,Sorte,idFiltro,qIncr,bPrimaEstrFissa,nDistanza,nclasse,alunghette15)

In questo caso di esempio sarebbe da dinamicizzare la function con la variabile X al posto del 15 e X dovrebbe poter assumere qualsiasi valore gli metta nel for relativo...

La domanda è... come possono dinamicizzare questa unica riga? E avere qualcosa del tipo...


call AnalisiLunghetteFromSceglinumeriX (Inizio,Fine,aRuoteX,Sorte,idFiltro,qIncr,bPrimaEstrFissa,nDistanza,nclasse,alunghetteX)

che richiami qualcosa del tipo:


Sub AnalisiLunghetteFromSceglinumeriX (Inizio,Fine,aRuoteX,Sorte,idFiltro,qIncr,bPrimaEstrFissa,nDistanza,nclasse,alunghetteX)

e quindi poter attribuire ad X il valore numerico progressivo che di volta in volta mi necessita... riferendomi però ad una sola SUB "dinamicizzata" appunto...

Questo risolverebbe il problema fastidiosissimo e bloccante del messaggio "overflow" che mi appare nel mio script relativo composto attualmente da tutte le function con numero fisso... pesantissimo e con troppe righe di codice da gestire. ?


Grazie :)
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
Non si puo fare quello che dici tu , si può creare una sub che chiami tutte le altre in funzione del parametro X che di certo non può costituire parte del nome della routine.
 

lotto_tom75

Advanced Premium Member
Non si puo fare quello che dici tu , si può creare una sub che chiami tutte le altre in funzione del parametro X che di certo non può costituire parte del nome della routine.

Temevo una risposta del genere ? . Ok pazienza ?.
Comunque grazie Giggio ? :).

Ad ogni modo molto probabilmente in effetti mi basterebbe dinamicizzare il parametro array aruoteX della function che invece rimarrebbe come deve essere "statica". In fine dei conti anche alunghette può rimanere il medesimo...

Sub AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aruote15,Sorte,idFiltro,qIncr,bPrimaEstrFissa,nDistanza,nclasse,alunghette)


Secondo questa leggera ma sostanziale modifica come dinamicizzeresti il parametro aruote in modo che possa valutare in un relativo ciclo operativo vari aruote dinamici del tipo

aruote1
aruote2
aruote3
aruote4
ecc...
fino nel mio caso a aruote35 ?

Dove aruote1, e tutti i suoi analoghi, è un vettore con questo tipo di struttura:

aruote1(3)
aruote1(1)=BA_
aruote1(2)=CA_
aruote1(3)=FI_

ecc...


Grazie se puoi dettagliare anche la tua soluzione possibile e alternativa che hai palesato nella tua risposta.

Ciao :)

ps: io per adesso avrei provato senza esito anche così:

Codice:
For X = 1 To 35
Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aruote&X,Sorte,aLunghette)
If ScriptInterrotto Then Exit For
Next

per tentare di richiamare la relativa Sub con il parametro aruote "dinamico":


Codice:
Sub AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aruote&X,Sorte,aLunghette)

ma evidentemente non è nemmeno questa la strada... perchè nella Sub aruote&X non me lo evidenzia neppure come parametro definito...
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
Le funzioni con i parametri servono proprio per avere un'astrazione delle operazioni che svolgono.
Sinceramente non ti capisco ..

Se io faccio una funzone che prevede un parametro di tipo array come in questo caso quando la chiamo gli passo
l'array che voglio e lei al suo interno opera con l'array che gli ho passato , quindi quante volte chiamarla e con quale array dipende da me

cosi a me non piace ma per farti capire ...

Codice:
Option Explicit
Dim aRuote1
Dim aRuote2
Dim aRuote3

Sub Main
   aRuote1  = Array  (  0,1,2,3)
   aRuote2  = Array  (  0,4,5,6,7)
   aRuote3  = Array  (  0, 8, 9)
        
   OperaSuArray 2'
  
End Sub

Sub OperaSuArray  (  numArray)
  
   Select Case numArray
   Case 1
      OutputArray aRuote1 , "aRuote1"
   Case 2
      OutputArray aRuote2 , "aRuote2"
   Case 3
      OutputArray aRuote3 , "aRuote3"
   Case Else
      Scrivi "Non gestito"   
   End Select
End Sub
Sub OutputArray  ( a , NomeArray)
   Dim i
  
   Scrivi "Nome array " & NomeArray
   For i  = 1 To UBound  ( a)
      Scrivi i & " )" & a  ( i)
   Next
End Sub
 

lotto_tom75

Advanced Premium Member
Le funzioni con i parametri servono proprio per avere un'astrazione delle operazioni che svolgono.
Sinceramente non ti capisco ..

Se io faccio una funzone che prevede un parametro di tipo array come in questo caso quando la chiamo gli passo
l'array che voglio e lei al suo interno opera con l'array che gli ho passato , quindi quante volte chiamarla e con quale array dipende da me

cosi a me non piace ma per farti capire ...

Codice:
Option Explicit
Dim aRuote1
Dim aRuote2
Dim aRuote3

Sub Main
   aRuote1  = Array  (  0,1,2,3)
   aRuote2  = Array  (  0,4,5,6,7)
   aRuote3  = Array  (  0, 8, 9)
   
   OperaSuArray 2'

End Sub

Sub OperaSuArray  (  numArray)

   Select Case numArray
   Case 1
      OutputArray aRuote1 , "aRuote1"
   Case 2
      OutputArray aRuote2 , "aRuote2"
   Case 3
      OutputArray aRuote3 , "aRuote3"
   Case Else
      Scrivi "Non gestito"
   End Select
End Sub
Sub OutputArray  ( a , NomeArray)
   Dim i

   Scrivi "Nome array " & NomeArray
   For i  = 1 To UBound  ( a)
      Scrivi i & " )" & a  ( i)
   Next
End Sub

Cio Giggio grazie. Allora guardo di rileggermi un pò la struttura che mi hai indicato... qui sopra e di cercare di semplificare il più possibile il mostruoso e pesante code di oltre 3000 righe che mi sto costruendo con fatica immane ?

Ad ogni modo operativamente parlando avrei risolto... (anche se nella forma meno elegante e sintetica possibile ?) solo che... avrei bisogno di far acquisire uno stesso gruppo numerico per tutte le function che ho messo in cascata... e che per adesso eseguono ciò che devono fare solo se rimetto prima di ognuna di esse l'array popolato con i numeri base desiderati...

per semplificare un pochino.?.. ho provato anche a fare una piccola function di lettura file txt dove risiede il gruppo numerico ma nonostante i numeri vengano letti correttamente non riesco a passarli alle varie function in cascata che li devono gestire... ?

es.

Codice:
Sub Qualsiasi...

Select Case ScegliTipoSviluppo

Case 1

Call leggigrupponumericodibasedasviluppare

alunghette = Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)

Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aruote1,Sorte,nclasse,alunghette)
Call AnalisiLunghetteFromSceglinumeri2(Inizio,Fine,aruote2,Sorte,nclasse,alunghette)
Call AnalisiLunghetteFromSceglinumeri3(Inizio,Fine,aruote3,Sorte,nclasse,alunghette)


End Select

End Sub

Function leggigrupponumericodibasedasviluppare

Dim sfiletxtgrupponumerico,sfile
sfiletxtgrupponumerico = ".\sfiletxtgrupponumerico.txt"
sfile = sfiletxtgrupponumerico


Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Dim y
      Call LeggiRigheFileDiTesto(sfile,aRighe)
  
      For y = 0 To UBound(aRighe)
      If aRighe(y) <> "" Then
      ReDim alunghette(0)  
     Call SplitByChar("." & aRighe(y),".",alunghette)
     End If
     Next

End Function


Il tutto infatti... funziona solo se faccio così:


Codice:
Sub Qualsiasi...

Select Case ScegliTipoSviluppo

Case 1

Call leggigrupponumericodibasedasviluppare

alunghette = Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)

Call AnalisiLunghetteFromSceglinumeri(Inizio,Fine,aruote1,Sorte,nclasse,alunghette)

alunghette = Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)

Call AnalisiLunghetteFromSceglinumeri2(Inizio,Fine,aruote2,Sorte,nclasse,alunghette)

alunghette = Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)


Call AnalisiLunghetteFromSceglinumeri3(Inizio,Fine,aruote3,Sorte,nclasse,alunghette)


End Select

End Sub

Function leggigrupponumericodibasedasviluppare

Dim sfiletxtgrupponumerico,sfile
sfiletxtgrupponumerico = ".\sfiletxtgrupponumerico.txt"
sfile = sfiletxtgrupponumerico


Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Dim y
      Call LeggiRigheFileDiTesto(sfile,aRighe)
  
      For y = 0 To UBound(aRighe)
      If aRighe(y) <> "" Then
      ReDim alunghette(0)  
     Call SplitByChar("." & aRighe(y),".",alunghette)
     End If
     Next

End Function

Ovvero se prima di ogni call function progressiva ripopolo l'array che ciascuna di esse deve analizzare... ?

Così facendo lo script funziona ma ovviamente ha il grosso problema che se voglio cambiare il file numerico di base lo devo fare per 35 volte ? anzichè una volta soltanto come mi sarebbe invece richiesto se riuscissi a passare i numeri alle function dall'unico file txt modificabile eventualmente di volta in volta...

Grazie 1000 se mi illumini su questo punto di buio dovuto anche al caldo oltre al fatto che non sono affatto un programmatore professionista ma solo amatoriale e perfino di basso anzi bassissimo livello ?? Ciao
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
che senso ha qui ? l'array aLunghette viene rialimentato N volte per nessuna ragione ...


Codice:
For y = 0 To UBound(aRighe)
      If aRighe(y) <> "" Then
      ReDim alunghette(0) 
     Call SplitByChar("." & aRighe(y),".",alunghette)
     End If
     Next
 

lotto_tom75

Advanced Premium Member
che senso ha qui ? l'array aLunghette viene rialimentato N volte per nessuna ragione ...


Codice:
For y = 0 To UBound(aRighe)
      If aRighe(y) <> "" Then
      ReDim alunghette(0)
     Call SplitByChar("." & aRighe(y),".",alunghette)
     End If
     Next

Giusto. Pensi possa dipendere da questo il fatto che non passi i valori alle function in cascata? :unsure: Grazie
 

Giggio

Super Member >PLATINUM<
Buongiorno LottoTom , devo fare un meaculpa e darti una bella notizia
Codice:
Option Explicit
Sub Main
  
   Dim FP 
  Set FP = GetRef("F")

   Scrivi FP("a")
   Scrivi FP(123)
End Sub

Function F(p)
  F = p + p
End Function
 

lotto_tom75

Advanced Premium Member
Buongiorno LottoTom , devo fare un meaculpa e darti una bella notizia
Codice:
Option Explicit
Sub Main
 
   Dim FP
  Set FP = GetRef("F")

   Scrivi FP("a")
   Scrivi FP(123)
End Sub

Function F(p)
  F = p + p
End Function

Grazie mille Giggio :) Anche se non ho ben chiaro di cosa si tratti guardandolo in forma ermetica... non vedo l'ora di provarlo... se ha a che vedere come penso con il prb che ho riportato sopra. ??
 

Giggio

Super Member >PLATINUM<
come vedi c'è una funzione che si chiama F che ha un solo paramero P

ora se fai caso quando nel codice si chiama la funzione non si scrive la classica riga
Codice:
call F( ..)
bensi si ottiene prima una referenza allla funzione F

con questa parte di codice
Codice:
Dim FP 
Set FP = GetRef("F")

Come vedi F il nome della funzione è scritto tra virgolette quindi è una stringa

quando la si chiama la si chiama attraverso la sua referenza con FP , la a che vedi è un parametro arbitrario messo a caso per fare il test

Codice:
Scrivi FP("a")

oppure
Codice:
 Scrivi FP(123)


anche in questo caso 123 è un parametro arbitrario.


dato che la funzione F come vedi da quello che fa ritorna la somma del valore del parametro su se stesso se passi "a" torna "aa" se passi 123 torna 246


quindi si puo chiamare una funzione il cui nome sia dinamico e letto da una stringa ? la risposta è si.
 

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