Novità

Come realizzare questo script di "collimazione" ?

lotto_tom75

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
: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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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:



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

Alien.

Advanced Premium Member
Messaggi
23.558
Punti reazione
206
Punti
63
Toc.Toc permesso ! ma lo script è un fantasma mi resta il foglio tutto bianco come mai ?
 
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

Premium Member
Messaggi
8.619
Punti reazione
426
Punti
83
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
    giovedì 04 giugno 2020
    Bari
    66
    16
    84
    79
    42
    Cagliari
    12
    89
    70
    50
    65
    Firenze
    10
    14
    28
    58
    27
    Genova
    74
    68
    77
    64
    31
    Milano
    85
    64
    15
    67
    28
    Napoli
    33
    80
    12
    11
    20
    Palermo
    42
    24
    79
    45
    48
    Roma
    52
    77
    39
    01
    56
    Torino
    66
    20
    62
    64
    26
    Venezia
    31
    30
    66
    68
    88
    Nazionale
    25
    10
    89
    39
    18

Ultimi Messaggi

Alto