Novità

Come svuotare un vettore solo dopo un controllo per evitare che sia già vuoto e il comando dia errore?

lotto_tom75

Advanced Premium Member
Ho provato con

Codice:
erase vettore
vettore.clear
redim vettore(0)

ma in tutti i casi o da errore o non me lo svuota se ha i valori inseriti in run time :unsure:

Più nel dettaglio ho

Codice:
'un vettore
redim vettorecollimanti(0)
' carico il vettorecollimanti con:
Call array_push(vettorecollimanti,(numeri(x,2)))

ma dopo ogni ciclo lo dovrei svuotare... per valutare solo TOT collimanti ad ogni giro (estrazione analizzata)
Invece al momento mi aggiunge tutti i collimanti al vettore ad ogni ciclo vanificandomi la correttezza della successiva operazione di analisi...
 
Ultima modifica:

salvo50

Advanced Member >PLATINUM PLUS<
Ciao, guarda in questo 3D, forse c'è la risposta al tuo quesito


 

lotto_tom75

Advanced Premium Member
Ciao Salvo, grazie dell'indicazione ma purtroppo non riesco a venirne a capo nemmeno leggendo quel post :( :) Grazie comunque ;)
 

joe

Advanced Member >PLATINUM PLUS<
Ciao Tom,

E' semplice.

Non devi Dimensionare a priori e poi non devi cancellare la matrice.

Cioè non devi usare la coppia di istruzioni DIM - ERASE.

Ridimensioni sempre con REDIM il contenitore prima di iniziare ad usarlo.

Se è per esempio N(90) scrivi ReDim N(90)

Se è Rit (90,12) utilizzi ReDim Rit(90,12)

SEMPRE PRIMA di incominciare ad inserirci i nuovi valori.

L'altra alternativa è questa:

Se vuoi utilizzare Dim a tutti i costi, come per esempio Dim N(90)

Costruisci una piccolo for-next per svuotare il tuo contenitore.

Cioè l'equivalente del ReDim di L8 e di Spaziometria:

For X= 1 To 90
N(x) = 0
Next

:)
 

lotto_tom75

Advanced Premium Member
Ciao Tom,

E' semplice.

Non devi Dimensionare a priori e poi non devi cancellare la matrice.

Cioè non devi usare la coppia di istruzioni DIM - ERASE.

Ridimensioni sempre con REDIM il contenitore prima di iniziare ad usarlo.

Se è per esempio N(90) scrivi ReDim N(90)

Se è Rit (90,12) utilizzi ReDim Rit(90,12)

SEMPRE PRIMA di incominciare ad inserirci i nuovi valori.

L'altra alternativa è questa:

Se vuoi utilizzare Dim a tutti i costi, come per esempio Dim N(90)

Costruisci una piccolo for-next per svuotare il tuo contenitore.

Cioè l'equivalente del ReDim di L8 e di Spaziometria:

For X= 1 To 90
N(x) = 0
Next

:)


Ciao Joe grazie per la risp :) .

Ad ogni modo purtroppo non riesco a risolvere con questa funzione che la richiederebbe :( :)

Ho cercato d'implementarvi il praticissimo code che mi ha postato gentilmente il grandissimo beppignello sulle collimazioni ma appunto mi sono arenato sulla cancellazione dei precedenti valori del vettore che dovrei poi poter utilizzare per ricrearmi un file txt con solo gli ultimi valori generati e caricati ad ogni ciclo... di elaborazione

Codice:
Function analisicollimanti

    ReDim vettorecollimanti(0)     'vettore ridimensionabile in cui andranno tutti i collimanti da ripassare a verificatutto prima di essere cancellati
      'inizializzo l'array prima di ogni verifica....
   'vettorecollimanti = Nothing
   'Erase vettorecollimanti
   Dim sfilexcollimazionefull
   Dim filerisultanzecollimazione
   Dim filenumericollimazionexverifica
   Dim k,k2
   'cancello file dei valori collimanti precedenti
   filexvaloricollimanti = ".\valoricollimantivolatili.txt"
   If FileEsistente(filexvaloricollimanti) Then
   Call EliminaFile(filexvaloricollimanti)
   End If
   'sfilexcollimazionefull = ".\filexverificafinale.txt"
   filerisultanzecollimazione = ".\risultanzecollimazione.txt"
   filenumericollimazionexverifica = ".\filenumericollimazionexverifica.txt"

   If FileEsistente(filerisultanzecollimazione) Then
   Call EliminaFile(filerisultanzecollimazione)
   End If

   If FileEsistente(filenumericollimazionexverifica) Then
   Call EliminaFile(filenumericollimazionexverifica)
   End If


    sfilexcollimazionefull = ".\filexverificafinale.txt"
    filerisultanzecollimazione = ".\risultanzecollimazione.txt"
    filenumericollimazionexverifica = ".\filenumericollimazionexverifica.txt"


   ReDim numeri(90,2)
   ReDim nr(90)
   If FileEsistente(sfilexcollimazionefull) Then
      Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Call LeggiRigheFileDiTesto(sfilexcollimazionefull,aRighe)
      For k = 0 To UBound(aRighe)
      'Call Trim(".",aRighe(k))
      'Scrivi "riga " & k & ": " & aRighe(k)
      If aRighe(k) <> "" Then
      Call SplitByChar("." & aRighe(k),".",nr)
      '  Call SplitByChar(aRighe(k),".",nr)
      ' verifica lettura file
       For k2 = 2 To UBound(nr)
       ' Scrivi "-" & nr(k2) & "-"
      numeri(nr(k2),1) = numeri(nr(k2),1) + 1 ''' contatore presenze
      numeri(nr(k2),2) = nr(k2)
      Next
       End If
       Next
       Call OrdinaMatrice(numeri,- 1,1)
      '
      ColoreTesto(2)
      'Scrivi StringaNumeri(nr,"."),1
      ColoreTesto(0)

      'Scrivi
      Scrivi
      Scrivi "Questi numeri sottostanti collimano per almeno due valori..."
      Scrivi
     ' Scrivi

      Dim Stringarisultaticollimazione,x,collimazionefullok

      For x = 1 To 90
         If numeri(x,1) >= 2 Then
            Scrivi Format2(numeri(x,2)) & " pres. " & numeri(x,1)
            Stringarisultaticollimazione =(Format2(numeri(x,2)) & " pres. " & numeri(x,1))

            Call ScriviFile(filerisultanzecollimazione,Stringarisultaticollimazione,False,True)
            'Call ScriviFile(filenumericollimazionexverifica,"-----collim. parziale-----",False,True)
            'Call ScriviFile(filenumericollimazionexverifica,numeri(x,2),False,True)

'   'aggiungo ogni rilevanza al 100% al vettore collimanti
'   Call array_push(vettorecollimanti,(numeri(x,2)))

         End If
   
      '   'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto
         'Dim d
         'For d = 0 To UBound(vettorecollimanti) 'Then
         'Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         'Next

      Next


         'Scrivi
      Scrivi
      Scrivi "Questi numeri sottostanti collimano per tutte le " &(UBound(aRighe) + 1) & " righe rilevate..."
      Scrivi
     ' Scrivi

      For x = 1 To 90
         If numeri(x,1) = UBound(aRighe) + 1 Then
            Scrivi Format2(numeri(x,2)) & " pres. " & numeri(x,1)
            Stringarisultaticollimazione =(Format2(numeri(x,2)) & " pres. " & numeri(x,1))

            Call ScriviFile(filerisultanzecollimazione,Stringarisultaticollimazione,False,True)
            'Call ScriviFile(filenumericollimazionexverifica,"-----------------100%----------------",False,True)
            Call ScriviFile(filenumericollimazionexverifica,Format2(numeri(x,2)),False,True)
      
            'aggiungo ogni rilevanza al 100% al vettore collimanti

   Call array_push(vettorecollimanti,(numeri(x,2)))

            collimazionefullok = collimazionefullok + 1
      
            'Call CloseFileHandle(filenumericollimazionexverifica)
      
                  '   'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto
         'Dim d,filexvaloricollimanti
          'filexvaloricollimanti = ".\valoricollimantivolatili.txt"
         'For d = 0 To UBound(vettorecollimanti) 'Then
         'Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         'Call ScriviFile(filexvaloricollimanti,vettorecollimanti(d),False,True)
   
         'Next


    'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto


       'Call ScriviFile(filenumericollimazionexverifica,"-----------------prox estrazione----------------",False,True)
   
         'ReDim vettorecollimanti(0)
   
         'una volta che il vettore è pieno ad ogni caso richiamo la funzione verificatutto passandoglielo....
         'oppure passando il vettore ad una sua funzione clone che verifichi appunto i collimanti....
         'Call Function Verificatuttocollimanti (vettorecollimanti)
         'provo  a scrivere i valori in un file e allegerli subito dopo con verificatutto...


         End If



       'Call ScriviFile(filenumericollimazionexverifica,"-----------------prox estrazione----------------",False,True)
   
         'ReDim vettorecollimanti(0)
   
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call CloseFileHandle(filenumericollimazionexverifica)
'Call CloseFileHandle(filenumericollimazionexverifica)
Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti
'Erase vettorecollimanti

'-----------------------------------------------------------------------------------------------
   
         Next

       




        'ReDim vettorecollimanti(0)
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti

'-----------------------------------------------------------------------------------------------
   
         End If


           Dim d,filexvaloricollimanti
         filexvaloricollimanti = ".\valoricollimantivolatili.txt"
         For d = 0 To UBound(vettorecollimanti) 'Then
         Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         Call ScriviFile(filexvaloricollimanti,vettorecollimanti(d),False,True)
         Next
   
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti

'-----------------------------------------------------------------------------------------------
 
       'ReDim vettorecollimanti(0)
 
       End Function

Al momento quello è ottengo all'interno del file risultante txt è qualcosa di questo tipo:

-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
39
38
42
40
36
30
29
32
31
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
16
33
36
38
37
29
28
30
32
31
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------
58
60
55
57
62
69
66
65
70
44
-----------------linea di confine----------------
-----------------linea di confine----------------
-----------------linea di confine----------------

Mentre correttamente, sempre secondo l'esempio, dovrei ottenere alla fine solo questo


58
60
55
57
62
69
66
65
70
44

In modo da poterlo poi inserire dal vettore in un txt e poi riprenderlo per eventuali successive elaborazioni...

"linea di confine" è dove dovrei riuscire a pulire il vettore ogni volta prima di ogni successiva elaborazione del suo contenuto. Invece per adesso riesco a scrivere nel file solo "linea di confine" tra un contenuto e l'altro :)

Tu come lo svuoteresti all'interno di quella funzione che ti ho postato sopra il vettore collimanti(0) ??? Intendo dire mi posteresti la riga di codice per farlo nella relativa funzione?

Lo script che sto costruendo è molto lungo (oltre 2600 righe di codice)... ed è difficoltoso anche solo per poterlo editare nella relativa sezione che si chiude per over flow continuamente :( :) . Per ovviare a questo problema ricorro a notepad++ caricandolo solo alla fine in spaziometria.


Grazie comunque. Ciao
 

joe

Advanced Member >PLATINUM PLUS<
Si certo non posso addentrarmi nel capire uno script non mio ...

... e che è praticamente impossibile da interpretare.

In quello che vedo, con una lettura al volo,

numeri(nr(k2),1) = numeri(nr(k2),1) + 1 ''' contatore presenze
numeri(nr(k2),2) = nr(k2)

... è dove vengono contati.

Avrai dunque un valore massimo di k2

Quindi il ciclo di cancellazione dovrebbe essere

For x= 0 To k2

numeri (nr(x),1) = 0
numeri (nr(x),2) = 0

Next

Dopo aver scritto "linea di confine"

hai una parte del programma che ti espone "i risultati"

58
60
55
57
62
69
66
65
70
44

... ecc.

dovrebbe essere un qualcosa del tipo

For indice = 0 To 90

Collimante (indice) > 1 then Scrivi Indice

Next

Dunque dopo aver esposto i risultati dovresti scrivere

For indice = 0 To 90

Collimante (indice) = 0 ' Equivalente a Redim Collimante(90)

Next

:)
 

lotto_tom75

Advanced Premium Member
E' facile... ma a me sta mandando in tilt il cervello caro Joe o_O?


Ho provato ad inserire sia l'una che l'altra tua soluzione, praticamente dappertutto nella funzione interessata, ma senza alcun risultato ?? Il vettore mi resta bello pieno... ogni volta che ci provo...??:sneaky:

E' chiarissimo che il problema adesso dipenda al 99% dal fatto che non sappia nè come nè dove inserire correttamente il tuo "cleaner vector" code :rolleyes: e dall'1% dai miei neuroni al pascolo... ?

Codice:
    Function analisicollimanti
   
    'Dim vettorecollimanti
    ReDim vettorecollimanti(0) 'vettore ridimensionabile in cui andranno tutti i collimanti da ripassare a verificatutto prima di essere cancellati
   'vettorecollimanti(0)="pippo"
   'inizializzo l'array prima di ogni verifica....
   'vettorecollimanti = Nothing
   'Erase vettorecollimanti
  
  
   Dim Indice

For Indice = 0 To UBound(vettorecollimanti)

vettorecollimanti(Indice) = 0 ' Equivalente a Redim Collimante(90)

Next
  
  
    Dim sfilexcollimazionefull
  
    Dim filerisultanzecollimazione
   
    Dim filenumericollimazionexverifica
   
    Dim k,k2
  
   'cancello file dei valori collimanti precedenti
   filexvaloricollimanti = ".\valoricollimantivolatili.txt"
 
   If FileEsistente(filexvaloricollimanti) Then
   Call EliminaFile(filexvaloricollimanti)
   End If
  
  
   'sfilexcollimazionefull = ".\filexverificafinale.txt"
   filerisultanzecollimazione = ".\risultanzecollimazione.txt"
   filenumericollimazionexverifica = ".\filenumericollimazionexverifica.txt"
  
   If FileEsistente(filerisultanzecollimazione) Then
   Call EliminaFile(filerisultanzecollimazione)
   End If
  
   If FileEsistente(filenumericollimazionexverifica) Then
   Call EliminaFile(filenumericollimazionexverifica)
   End If
  
  
    sfilexcollimazionefull = ".\filexverificafinale.txt"
  
    filerisultanzecollimazione = ".\risultanzecollimazione.txt"
   
    filenumericollimazionexverifica = ".\filenumericollimazionexverifica.txt"
  
  
    ReDim numeri(90,2)
   ReDim nr(90)
  
   For k2 = 2 To UBound(nr)
           
          ' Scrivi "-" & nr(k2) & "-"
           
         numeri(nr(k2),1) = 0''' contatore presenze
           
        numeri(nr(k2),2) = 0
                    
Next
  
  
   If FileEsistente(sfilexcollimazionefull) Then
      Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Call LeggiRigheFileDiTesto(sfilexcollimazionefull,aRighe)
     
      For k = 0 To UBound(aRighe)
     
      'Call Trim(".",aRighe(k))
     
       'Scrivi "riga " & k & ": " & aRighe(k)
        
         If aRighe(k) <> "" Then
        
         Call SplitByChar("." & aRighe(k),".",nr)

        
          '  Call SplitByChar(aRighe(k),".",nr)
           ' verifica lettura file
            For k2 = 2 To UBound(nr)
           
           ' Scrivi "-" & nr(k2) & "-"
           
            numeri(nr(k2),1) = numeri(nr(k2),1) + 1 ''' contatore presenze
           
            numeri(nr(k2),2) = nr(k2)
           
            Next
            '
         End If
     
      Next
     
      Call OrdinaMatrice(numeri,- 1,1)
      '
      ColoreTesto(2)
      'Scrivi StringaNumeri(nr,"."),1
      ColoreTesto(0)
     
      'Scrivi
      Scrivi
      Scrivi "Questi numeri sottostanti collimano per almeno due valori..."
      Scrivi
     ' Scrivi
     
      Dim Stringarisultaticollimazione,x,collimazionefullok
     
      For x = 1 To 90
         If numeri(x,1) >= 2 Then
            Scrivi Format2(numeri(x,2)) & " pres. " & numeri(x,1)
            Stringarisultaticollimazione =(Format2(numeri(x,2)) & " pres. " & numeri(x,1))
  
            Call ScriviFile(filerisultanzecollimazione,Stringarisultaticollimazione,False,True)
            'Call ScriviFile(filenumericollimazionexverifica,"-----collim. parziale-----",False,True)
            'Call ScriviFile(filenumericollimazionexverifica,numeri(x,2),False,True)
  
'   'aggiungo ogni rilevanza al 100% al vettore collimanti
'   Call array_push(vettorecollimanti,(numeri(x,2)))
  
         End If
        
      '   'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto
         'Dim d
         'For d = 0 To UBound(vettorecollimanti) 'Then
         'Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         'Next

      Next
  
  
         'Scrivi
      Scrivi
      Scrivi "Questi numeri sottostanti collimano per tutte le " &(UBound(aRighe) + 1) & " righe rilevate..."
      Scrivi
     ' Scrivi
     
      For x = 1 To 90
         If numeri(x,1) = UBound(aRighe) + 1 Then
            Scrivi Format2(numeri(x,2)) & " pres. " & numeri(x,1)
            Stringarisultaticollimazione =(Format2(numeri(x,2)) & " pres. " & numeri(x,1))
  
            Call ScriviFile(filerisultanzecollimazione,Stringarisultaticollimazione,False,True)
            'Call ScriviFile(filenumericollimazionexverifica,"-----------------100%----------------",False,True)
            Call ScriviFile(filenumericollimazionexverifica,Format2(numeri(x,2)),False,True)
           
            'aggiungo ogni rilevanza al 100% al vettore collimanti
  
   Call array_push(vettorecollimanti,(numeri(x,2)))
  
            collimazionefullok = collimazionefullok + 1
           
            'Call CloseFileHandle(filenumericollimazionexverifica)
           
                  '   'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto
         'Dim d,filexvaloricollimanti
          'filexvaloricollimanti = ".\valoricollimantivolatili.txt"
         'For d = 0 To UBound(vettorecollimanti) 'Then
         'Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         'Call ScriviFile(filexvaloricollimanti,vettorecollimanti(d),False,True)
        
         'Next
     
     
    'mostra i valori collimanti presenti nel rispettivo array da passare al verificatutto

     
       'Call ScriviFile(filenumericollimazionexverifica,"-----------------prox estrazione----------------",False,True)
        
         'ReDim vettorecollimanti(0)
        
         'una volta che il vettore è pieno ad ogni caso richiamo la funzione verificatutto passandoglielo....
         'oppure passando il vettore ad una sua funzione clone che verifichi appunto i collimanti....
         'Call Function Verificatuttocollimanti (vettorecollimanti)
         'provo  a scrivere i valori in un file e allegerli subito dopo con verificatutto...

  
         End If
     
     
     ' For x = 0 To k2

'numeri(nr(x),1) = 0
'numeri(nr(x),2) = 0

'Next

'For k2 = 2 To UBound(nr)
           
'          ' Scrivi "-" & nr(k2) & "-"
           
'        numeri(nr(k2),1) = 0''' contatore presenze
           
  '       numeri(nr(k2),2) = 0
                    
'Next


     
       'Call ScriviFile(filenumericollimazionexverifica,"-----------------prox estrazione----------------",False,True)
        
         'ReDim vettorecollimanti(0)
        
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call CloseFileHandle(filenumericollimazionexverifica)
'Call CloseFileHandle(filenumericollimazionexverifica)
Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti
'Erase vettorecollimanti

'-----------------------------------------------------------------------------------------------
        
         Next
     
      
'For k2 = 2 To UBound(nr)
           
           ' Scrivi "-" & nr(k2) & "-"
           
'           numeri(nr(k2),1) = 0 'numeri(nr(k2),1) + 1 ''' contatore presenze
           
  '          numeri(nr(k2),2) = 0 'nr(k2)
           
   '         Next
     
  
     
     
     
        'ReDim vettorecollimanti(0)
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti

'-----------------------------------------------------------------------------------------------
        
         End If
        
        
               
'For k2 = 2 To UBound(nr)
           
           ' Scrivi "-" & nr(k2) & "-"
           
'           numeri(nr(k2),1) = 0 'numeri(nr(k2),1) + 1 ''' contatore presenze
           
  '          numeri(nr(k2),2) = 0 'nr(k2)
           
   '         Next
     
     
     
           Dim d,filexvaloricollimanti
         filexvaloricollimanti = ".\valoricollimantivolatili.txt"
         For d = 0 To UBound(vettorecollimanti) 'Then
         Scrivi "valore collimante " & d & ": " & vettorecollimanti(d)
         Call ScriviFile(filexvaloricollimanti,vettorecollimanti(d),False,True)
         Next
        
         '-------------------prova cancellazione file report precedenti ad ogni ciclo

'Call cancellafilexverificafinale
'Call ripuliscirisultanzecollimazioniprecedenti

'-----------------------------------------------------------------------------------------------
      
       'ReDim vettorecollimanti(0)
      
       End Function


Function cancellafilexverificafinale

Dim filexverificafinale
filexverificafinale = ".\filexverificafinale.txt"
If FileEsistente(filexverificafinale) Then
Call EliminaFile(filexverificafinale)
End If

'dim filenumericollimazionexverifica

'filenumericollimazionexverifica = ".\filenumericollimazionexverifica.txt"

'Call ScriviFile(filenumericollimazionexverifica,"-----------------prox estrazione----------------",False,True)

End Function
 

salvo50

Advanced Member >PLATINUM PLUS<
Ciao a Tutti.

Forse dico una banalità, ma il For-Next potresti metterlo una riga prima di dove ti serve vuoto.
 

lotto_tom75

Advanced Premium Member
Ciao a Tutti.

Forse dico una banalità, ma il For-Next potresti metterlo una riga prima di dove ti serve vuoto.

Ciao Salvo, potresti postare il code con il for next spostato come lo intendi tu? Perchè io ci ho provato ma non ho capito cosa intendi molto probabilmente.

Grazie
 

joe

Advanced Member >PLATINUM PLUS<
Io penso che se è impossibile ...

... è perchè è logicamente sbagliato.

Il ragionamento è questo:

A = 3

Scrivi A

A = 0

Scrivi A

Chiaro che dopo A=0

A non è più 3 ...

... ovvero il valore di A è Zero.

Se hai un vettore con dei valori

li scrivi

poi li azzeri

il vettore è vuoto.

Come vale per la variabile A ....

così vale per ogni ennesimo elemento del vettore A.

:)
 

joe

Advanced Member >PLATINUM PLUS<
Codice:
Option Explicit
Sub Main
  Dim P,I,A(10)
  Scrivi "5 Estratti Alternati A 5 Valori Nulli"
  For P = 1 To 5
    A(P*2) = Estratto(EstrazioneFin,BA_,P)
  Next
  Scrivi String (30,"-")
  Scrivi "Elenca tutto l'Array"
  For I = 1 To 10
    Scrivi I & " " & CInt(A(I))
  Next
  Scrivi String (30,"-")
  Scrivi "Elenca l'Array plulendolo"
  For I = 1 To 10
    Scrivi I & " " & CInt(A(I)) : A(I) = 0
  Next
  Scrivi String (30,"-")
  Scrivi "Elenca l'Array Ripulito"
  For I = 1 To 10
    Scrivi I & " " & CInt ( A(I))
  Next
End Sub
 

salvo50

Advanced Member >PLATINUM PLUS<
Ciao a Tutti

------------------------------------------------------------------------
For Indice = 0 To UBound(vettorecollimanti)

vettorecollimanti(Indice) = 0 ' Equivalente a Redim Collimante(90)

Next
----------------------------------------------------------------------------
da queste tue righe di script hai applicato il For-Next suggerito da Joe

quindi dopo queste righe il vettorecollimanti, dovrebbe essere vuoto

hai provato a mettere un Scrivi nella riga dopo per verificare che sia effettivamente così?

A volte mi succede che i calcoli lo script li fa sbagliati, cioè gli ho dato tutti i comandi giusti
quindi non va in errore, eppure i risultati sono errati, quasi sempre al 99% è che i numeri
che inserisco, lo script non li vede come numeri ma come stringa, mi basta mettere Cint
dove occorre e magicamente tutti i calcoli risultano giusti

Ho fatto questo esempio per dirti che forse il problema è da un'altra parte dello script
 
Ultima modifica:

joe

Advanced Member >PLATINUM PLUS<
Ciao Salvo,

Bhe si ...

... il nome della variabile-indice con cui si controlla il ciclo di visualizzazione

sia essa "A" o "VettoreCollimante" non influisce nel flusso e nella logica dello scriopt.

Giustamente, è più importante non mescolare il tipo dei valori che si stanno confrontando.

Se si mescolano "stringhe" e "numeri", si va incontro ad errori.

Dovendo trattare dei numeri, sarebbe meglio che i vettori contengano solo valori numerici.

Cioè meglio caricare degli "zero" (0) piuttosto che delle stringhe nulle ("").

In questo terzo esempio ho trasferito e racchiuso le istruzioni di pulizia del vettore

nella "Sub Pulisci" che è dedita a questa operazione.

Codice:
Option Explicit
Sub Main
Dim P,I,A(10)
Scrivi "Inserisce in A 5 Estratti  --- Alternandoli a Valori Nulli"
For P = 1 To 5
  A(P*2) = Estratto(EstrazioneFin,BA_,P)
Next
Scrivi String(30,"-")
Scrivi "Elenca tutto l'Array"
For I = 1 To 10
  Scrivi I & " " & CInt(A(I))
Next
Scrivi String(30,"-")
'Scrivi "Elenca l'Array"
'For I = 1 To 10
'  Scrivi I & " " & CInt(A(I)) : A(I) = 0
'Next
'Scrivi String(30,"-")
Scrivi "Pulisce l'Array"
Pulisci A
Scrivi String(30,"-")
Scrivi "Elenca l'Array dopo Ripulito"
For I = 1 To 10
  Scrivi I & " " & CInt(A(I))
Next
End Sub
Sub Pulisci(A)
Dim i
For i = 0 To UBound(A)
  A(i) = 0
Next
End Sub
 
Ultima modifica:

lotto_tom75

Advanced Premium Member
Grazie Joe, Salvo,
Con le vostre dritte, alla fine ci sono riuscito ? :)

Codice:
'provo a ripulire vettore
For a = 0 To UBound(GU)
GU(a) = 0
Next

Dipendeva anche dal posizionamento errato del richiamo della relativa funzione ;)
 

joe

Advanced Member >PLATINUM PLUS<
Ciao Tom,

in quest ultimo esempio, puoi vedere come quello che si è scritto,

è già elaborato, pari-pari, dall'istruzione ReDim.

Però ... adesso che hai capito dove era sbagliato, l'ordine logico,

delle istruzioni, hai acquisito tutta la competenza necessaria

per trattare i casi in cui è "necessario" azzerare dei dati intermedi.

Puoi anche notare come in questa versione del Basic

la variabile non deve essere bloccata ad un valore prestabilito.

Dunque, tutto funziona bene se si è previsto e scritto ReDim A(enne).

Mentre ... se si "blocca" il numero di valori ... con Dim A (enne)

si ottiene un messaggio di errore.

Codice:
Option Explicit
Sub Main
Dim P,I',A(10)<<<<
ReDim A(10) '<<<<< per poter utilizzare il vettore A
Scrivi "Inserisce in A 5 Estratti  --- Alternandoli a Valori Nulli"
For P = 1 To 5
  A(P*2) = Estratto(EstrazioneFin,BA_,P)
Next
Scrivi String(30,"-")
Scrivi "Elenca tutto l'Array"
For I = 1 To 10
  Scrivi I & " " & CInt(A(I))
Next
Scrivi String(30,"-")
Scrivi "Pulisce l'Array"
Pulisci A
Scrivi String(30,"-")
Scrivi "Elenca l'Array dopo Ripulito"
For I = 1 To 10
  Scrivi I & " " & CInt(A(I))
Next
End Sub
Sub Pulisci(A)
Dim i,u
u = UBound (A)
'For i = 0 To U
'  A(i) = 0
'Next
ReDim A(u)
End Sub

:)
 
Ultima modifica:

LottoPazzo

Advanced Member >PLATINUM PLUS<
Ciao, non ne capisco molto degli script, solo un poco di VBA Excel ma credo che rispondendo al tuo primo post di svuotare il vettore, io proporrei

vettore.value = ""

forse dico una grossa C..TA

bye bye (8-D
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 16 aprile 2024
    Bari
    49
    10
    76
    62
    26
    Cagliari
    42
    80
    16
    39
    65
    Firenze
    58
    22
    11
    86
    40
    Genova
    79
    14
    36
    51
    44
    Milano
    25
    27
    16
    77
    79
    Napoli
    70
    04
    51
    49
    71
    Palermo
    61
    65
    76
    53
    43
    Roma
    70
    86
    68
    80
    47
    Torino
    17
    71
    64
    72
    40
    Venezia
    22
    42
    39
    72
    30
    Nazionale
    83
    37
    81
    57
    78
    Estrazione Simbolotto
    Genova
    10
    14
    28
    18
    15
Alto