Novità

Come realizzare questo script di "collimazione" ?

lotto_tom75

Advanced Premium Member
Ho un file txt di studio con una serie di formazioni dinamiche sempre diverse come quelle di esempio sottostanti

Es. fittizio di sole 5 righe : fileA.txt

-30-40-55-57-58-60-61-62-63-66-67-68-69-70-71-73-74-75-26-78
-30-42-55-57-58-60-61-62-63-66-67-68-69-70-71-73-76-90-28-88
-30-50-55-57-58-60-61-62-63-66-67-68-69-70-71-73-77-2-11-89
-30-52-55-57-58-60-61-62-63-66-67-68-69-70-71-73-72-5-2-78
-30-53-55-57-58-60-61-62-63-66-67-68-69-70-71-73-74-18-4-78

Vorrei provare con uno script ad analizzare riga per riga e a scrivere in un altro file txt solo i numeri presenti in tutte le righe risultanti.

Sempre secondo l'esempio dovrei avere in fileB.txt solo questi numeri:

30-55-57-58-60-61-62-63-66-67-68-69-70-71-73

perchè appunto presenti in tutte e cinque le righe soprastanti di esempio.

In sostanza tecnicamente dovrei:

1) leggere il file (so come farlo) :)
2) mettere ciascuna riga splitatta in un relativo array (so come farlo) :)
3) confrontare ogni array relativo ad ogni riga (non so come farlo) ?
4) trovare gli elementi uguali ad ogni riga-array (non so come farlo) ?
5) scrivere il file2.txt con il contenuto del punto 4 (so come farlo) ?

Grazie 1️⃣0️⃣0️⃣0️⃣ a chi mi da una ? per i punti 3 e 4 :unsure:

Ps: l'ho già detto vero che questo forum, specialmente nella sua ultimissima versione, lo trovo strafigo??? ?????????? ??
 
B

Beppignello

Guest
Io userei una arrays sola. Numeri(90,2)
Dove nell elemto 1 accumulo la presenza nelle lunghette
E nell elemento due ci metto il nr


Alla fine della lettura delle righe del file
Ordino. la arrays per presenze discendenti
In modo di avere la possibilita' di vederli
Se i nr che hanno presenti uguali o di poco minori delle righe lette

In altre parole se leggo quattro righe di combinazioni
Devo rintracciare i numeri che avranno 4 presenze.
 

lotto_tom75

Advanced Premium Member
Grazie bepp per la velocissima risposta e dritta ??

Il concetto di come opereresti tu l'ho capito e lo trovo superbo ??

Purtroppo non ho ben chiaro però come costruire l'arrays bidimensionale (so comporlo solo uno con i valori singoli ?) nè come poterlo ordinare per le presenze discendenti, nè come scegliere il numero avente le presenze pari al numero di righe. Per avere il numero di righe presenti nel file in modo da poter confrontare poi i valori dei singoli elementi del array bi-dimensionale credo che basti un count nel relativo for ma per estrapolare l'elemento corrispondente dall'array dimensionale non ho idea di come fare. C'è scritto qualcosa nella guida di spazio che tu sappia? Non riesco a trovare funzioni o argomenti al riguardo... :rolleyes:

Thanks! ?
 
Ultima modifica:

lotto_tom75

Advanced Premium Member
Forse mi serve questo code... Ordina Matrice opportunatamente modificato...?

Codice:
Sub Main
   ReDim a(5,5)
   a(1,1) = 1
   a(2,1) = 4
   a(3,1) = 3
   a(4,1) = 2
   a(5,1) = 5
   a(1,2) = 0.01
   a(2,2) = 0.2
   a(3,2) = 0.02
   a(4,2) = 0.5
   a(5,2) = 0.8
   Call Scrivi("Ordinamento su colonna 1")
   Call OrdinaMatrice(a,- 1,1)
   For k = 1 To 5
      Call Scrivi(CStr(a(k,1)))
   Next
   Call Scrivi("Ordinamento su colonna 2")
   Call OrdinaMatrice(a,- 1,2)
   For k = 1 To 5
      Call Scrivi(CStr(a(k,2)))
   Next
   Call Scrivi("Ordinamento su vettore")
   ReDim a(5)
   a(1) = 2
   a(2) = 5
   a(3) = 3
   a(4) = 1
   a(5) = 4
   Call OrdinaMatrice(a,1)
   For k = 1 To 5
      Call Scrivi(CStr(a(k)))
   Next

   Scrivi "============================="
   ' -----------------------------------------
   ReDim a(5,5)
   a(1,1) = 1
   a(2,1) = 4
   a(3,1) = 3
   a(4,1) = 2
   a(5,1) = 5
   a(1,2) = 0.01
   a(2,2) = 0.2
   a(3,2) = 0.02
   a(4,2) = 0.5
   a(5,2) = 0.8
   Call Scrivi("Ordinamento Turbo su colonna 1")
   Call OrdinaMatriceTurbo(a,- 1,1)
   For k = 1 To 5
      Call Scrivi(CStr(a(k,1)))
   Next
   Call Scrivi("Ordinamento Turbo su colonna 2")
   Call OrdinaMatriceTurbo(a,- 1,2)
   For k = 1 To 5
      Call Scrivi(CStr(a(k,2)))
   Next
   Call Scrivi("Ordinamento Turbo su vettore")
   ReDim a(5)
   a(1) = 2
   a(2) = 5
   a(3) = 3
   a(4) = 1
   a(5) = 4
   Call OrdinaMatriceTurbo(a,1)
   For k = 1 To 5
      Call Scrivi(CStr(a(k)))
   Next
End Sub

Se si... come faccio ad inserire in a(90,2) i 2 valori di ciascuna riga letta dal file txt? o_O
Ovvero come faccio ad inserire nel primo spazio della matrice il numero e nel secondo il suo valore di presenza per ogni riga? ?

Io saprei inserire un solo valore con il seguente code:

Codice:
Call SplitByChar("-" & aRighe(k),"-",a)

Ma così mi inserisce nell'array (o matrice) monodimensionale solo i numeri della riga senza il rispettivo valore di presenza... ?

Codice:
Option Explicit
Sub Main

'TEST x estrapolazione valori collimanti

Dim sfile,k,k2
sfile = ".\testxvaloricollimanti.txt"

If FileEsistente(sfile) Then

Call Messaggio("Lettura file di testo")
ReDim aRighe(0)
Call LeggiRigheFileDiTesto(sfile,aRighe)
For k = 0 To UBound(aRighe)
If aRighe(k) <> "" Then

ReDim aN(0)

'Call SplitByChar("." & aRighe(k),".",aNum)
Call SplitByChar("-" & aRighe(k),"-",aN)



'verifica lettura file
For k2=0 To UBound(aN)
Scrivi "aN"&k2& " : " & aN(k2)
Next

End If
Next
End If


End Sub
 
Ultima modifica:
B

Beppignello

Guest
Esempio
Dom numeri (90,2)

Nr e' il singolo numero della lunghett che stai leggendo

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


Alla fine del loop delle combinazioni lette dal file
Call ordinamatrice(numeri,-1,1) ''' ordinO la matrice per elemento 1 che e' il contatore presenze in forma discendente -1

A questo punto fai for..next dei 90 numeri possibili, ottiene l elenco
Decrescente che puoi stampare oppure puoi raggruppare in un campo
E scriverlo su altro file.tot

Lo zero e" solo come limite inferiore che tu stabilisci
Se vuoi solo i numeri chefigurano nelle Lunghette minimo 2 o 3 o 4 volte
lo stabilisce tu dopo aver visto l elenco la prima volta.
Modificando lo zero in 2 o 3 o 4 o x che vuoi


For x = 1 to 90
If numeri(x,1) >= 0 the
scrivi numeri(x,2) & " pres. " & numeri(x,1)
End if
Next
 

lotto_tom75

Advanced Premium Member
Ho provato... ?
Ma in output ho solo uno sconsolante " pres. " kilometrico... ? ?



Codice:
Option Explicit
Sub Main

'TEST2 x estrapolazione valori collimanti

Dim sfile,k,k2,x
sfile = ".\testxvaloricollimanti.txt"


Dim numeri(90,2)

Dim nr

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

If FileEsistente(sfile) Then

Call Messaggio("Lettura file di testo")
ReDim aRighe(0)
Call LeggiRigheFileDiTesto(sfile,aRighe)
For k = 0 To UBound(aRighe)
If aRighe(k) <> "" Then


Call SplitByChar("-" & aRighe(k),"-",nr)


'verifica lettura file
'For k2=0 To UBound(nr)
'Scrivi "nr"&k2& " : " & nr(k2)
'Next


'End If
'Next
'End If

Call OrdinaMatrice(numeri,-1,1)

For x = 1 To 90
If numeri(x,1) >= 0 Then
Scrivi numeri(x,2) & " pres. " & numeri(x,1)
End If
Next

End If
Next
End If


End Sub




Where I wrong? ???
 
B

Beppignello

Guest
ho tolto sul file contenente le tue 5 combinazioni il (- leggasi trattino) iniziale prima dei numeri, quello di sinistra

ho fatto girare lo script

Codice:
Option Explicit
Sub Main
   'TEST2 x estrapolazione valori collimanti
   Dim sfile,k,k2,x
   sfile = "c:\temp\testxvaloricollimanti.txt"
   Dim numeri(90,2)
   ReDim nr(90)
   If FileEsistente(sfile) Then
      Call Messaggio("Lettura file di testo")
      ReDim aRighe(0)
      Call LeggiRigheFileDiTesto(sfile,aRighe)
      For k = 0 To UBound(aRighe)
         If aRighe(k) <> "" Then
            Call SplitByChar(aRighe(k),"-",nr)
            'verifica lettura file
            For k2 = 0 To UBound(nr)
               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)
      For x = 1 To 90
         If numeri(x,1) > 0 Then
            Scrivi format2(numeri(x,2)) & " pres. " & numeri(x,1)
         End If
      Next
   End If
End Sub

il tuo risultato:
30-55-57-58-60-61-62-63-66-67-68-69-70-71-73


ed ho ottenuto questo output, dopo la lettura di queste 5 righe:

-30-40-55-57-58-60-61-62-63-66-67-68-69-70-71-73-74-75-26-78
-30-42-55-57-58-60-61-62-63-66-67-68-69-70-71-73-76-90-28-88
-30-50-55-57-58-60-61-62-63-66-67-68-69-70-71-73-77-2-11-89
-30-52-55-57-58-60-61-62-63-66-67-68-69-70-71-73-72-5-2-78
-30-53-55-57-58-60-61-62-63-66-67-68-69-70-71-73-74-18-4-78

67 pres. 5
68 pres. 5
66 pres. 5
62 pres. 5
63 pres. 5
73 pres. 5
71 pres. 5
70 pres. 5
30 pres. 5
69 pres. 5
61 pres. 5
58 pres. 5
57 pres. 5
60 pres. 5

55 pres. 5
78 pres. 3
02 pres. 2
74 pres. 2
26 pres. 1
50 pres. 1
52 pres. 1
42 pres. 1
40 pres. 1
28 pres. 1
53 pres. 1
04 pres. 1
89 pres. 1
05 pres. 1
11 pres. 1
88 pres. 1
90 pres. 1
76 pres. 1
75 pres. 1
72 pres. 1
18 pres. 1
77 pres. 1
 
Ultima modifica di un moderatore:
B

Beppignello

Guest
a questo punto puoi metterli in un record e scriverli in un nuovo file se ti serve per fare altre cose.
 

lotto_tom75

Advanced Premium Member
:eek: Grazie mille carissimo ma io facendolo girare, dopo aver modificato il file txt come da te consigliato, ottengo questo erroraccio... o_O ?? Sarà l'emozione... ?

graziemillema.jpg

Ho semplicemente fatto copia e incolla dal tuo ultimo script aggiornato qui sopra e modificato il txt rimuovendo la lineetta iniziale (-). Tutto qui ?
 
Ultima modifica:
B

Beppignello

Guest
non so, ma non è che nel file hai un record in piu' ma a blanks o vuoto?
 

lotto_tom75

Advanced Premium Member
non so, ma non è che nel file hai un record in piu' ma a blanks o vuoto?

MI CORREGGO rimuovendo anche l'ultimo trattino in ciascuna riga del txt funziona tutto alla grandissimaaa GRAZIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE mitico bepp! ??? ;):cool:

arton152775-5e747.jpg


Se hai bisogno di qualsiasi tipo di analisi statistica e sono in grado di aiutarti fai un fischio. Io sono qui ??
 
B

Beppignello

Guest
ciao Alien
1) il file è questo ?
sfile = "c:\temp\testxvaloricollimanti.txt"

2) il percorso è lo stesso?

3) Call SplitByChar(aRighe(k),"-",nr)

i numeri sono divisi tra loro da un trattino?

4) non ci sono trattini o altri separatori, all'inizio o alla fine di ogni riga ed in fondo al file?

i motivi possono essere tra questi elencati.

prova a controllare il tutto
 

lotto_tom75

Advanced Premium Member
E' come dice Beppignello Alien ;)

In + posso dirti che se metti al posto di questo code
Codice:
 sfile = "c:\temp\testxvaloricollimanti.txt"


questo...


Codice:
file = ".\temp\testxvaloricollimanti.txt"

Peschi il file txt direttamente dalla directory dove risiede lo stesso script.

Ciao ad entrambi :)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 26 marzo 2024
    Bari
    30
    51
    17
    01
    53
    Cagliari
    13
    70
    25
    68
    47
    Firenze
    28
    30
    54
    70
    88
    Genova
    67
    87
    22
    03
    62
    Milano
    22
    34
    13
    47
    24
    Napoli
    20
    72
    59
    01
    52
    Palermo
    05
    72
    65
    52
    32
    Roma
    28
    43
    75
    54
    87
    Torino
    16
    08
    17
    24
    38
    Venezia
    67
    28
    55
    60
    29
    Nazionale
    15
    69
    22
    63
    39
    Estrazione Simbolotto
    Firenze
    44
    09
    31
    22
    16
Alto