Postato originariamente da Carlo:
Postato originariamente da Giacos71:
Immagino che ci siano da mettere una baraonda di IF di controllo. Al momento utilizzo vs2012 ho visto che c'è qualcosa di sql mi sembra una versione express.
Dipende se è necessario sistemarlo, se bisogna accedere alle estrazioni rispettando uno schema ordinato e congruo, si.
Se invece bisogna fare delle ricerche che producono classifiche sui numeri, come ritardi frequenze ecc. sulle varie ruote, il file va bene così.
Se sapessi che tipo di ricerca vorresti fare e quali dati vorresti produrre....
Di seguito il codice che ho usato per controllare il contenuto del file storico.txt
E' sufficiente aprire un progetto nuovo e copiare il codice, non devi aggiungere nulla sul form:
Public Class Form1
Dim RecordArchivioTXT As New List(Of String) ' lista che conterrà tutte le righe
Dim Caselle(65) As TextBox
Dim lblData As Label
Dim FileName As String = "C:\storico.txt"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Carica il file storico.txt della Lottomatica e legge tutte le righe
Try
' Se il file non esiste, verrà comunicato nell'eccezione.
' tutto il file nella lista riga per riga
RecordArchivioTXT = System.IO.File.ReadAllLines(FileName).ToList
Catch ex As Exception
' Mostro l'errore se la sub genera un errore.
MessageBox.Show("Error message: " & ex.Message)
End Try
' creazione del form
Dim leftSet As Integer = 20 ' posizione di visualizzazione dello schema
Dim topSet As Integer = 20 ' posizione di visualizzazione dello schema
Dim indice As Integer = 0 ' l'indice delle textbox
Dim ruote() As String = {"BARI", "CAGLIARI", "FIRENZE", "GENOVA", "MILANO", "NAPOLI", "PALERMO", "ROMA", "TORINO", "VENEZIA", "NAZIONALE"}
' creazione delle 66 textbox indicizzate
For riga = 1 To 11
For colonna = 1 To 6
Caselle(indice) = New TextBox
Caselle(indice).Name = "Casella" & indice.ToString("00")
If colonna = 1 Then ' le textbox che conterranno le ruote
Caselle(indice).Top = riga * 31 + topSet + 2
Caselle(indice).Left = colonna * 46 + leftSet - 20
Caselle(indice).Size = New Size(60, 20)
Caselle(indice).BorderStyle = BorderStyle.None
Caselle(indice).BackColor = Me.BackColor
Caselle(indice).Text = ruote(riga - 1)
Caselle(indice).ReadOnly = True
Else ' le textbox che conterranno i numeri
Caselle(indice).Top = riga * 31 + topSet
Caselle(indice).Left = colonna * 46 + leftSet
Caselle(indice).Size = New Size(40, 20)
Caselle(indice).BorderStyle = BorderStyle.FixedSingle
Caselle(indice).TextAlign = HorizontalAlignment.Center
End If
Controls.Add(Caselle(indice)) ' aggiungo la textbox sul form
indice += 1
Next
Next
' label con le info e data
lblData = New Label
lblData.Location = New Point(leftSet + 22, topSet)
lblData.AutoSize = True
lblData.Text = "l'archivio " & FileName & " contiene n." & RecordArchivioTXT.Count() & " righe"
Controls.Add(lblData) ' aggiungo la label sul form
' scrollbar per scorrere l'archivio
Dim scrollBar1 As New HScrollBar
scrollBar1.Location = New Point(Caselle(60).Left, Caselle(60).Top + 31) ' sotto la sessantesima casella
scrollBar1.Size = New Size(Caselle(59).Width + Caselle(59).Left - Caselle(54).Left, 20) ' lunga come tutte le caselle
scrollBar1.Maximum = RecordArchivioTXT.Count() - 1 ' valore per esplorare tutte le righe
scrollBar1.Minimum = 0
scrollBar1.LargeChange = 10
scrollBar1.SmallChange = 8
AddHandler scrollBar1.ValueChanged, AddressOf ScrollBar1_ValueChanged
Controls.Add(scrollBar1) ' aggiungo la scrollbar sul form
End Sub
Private Sub ScrollBar1_ValueChanged(sender As Object, e As EventArgs)
' l'archivio non ha sempre le stesse righe per ogni estrazione
' bisogna fare una ricerca da dove iniziare e dove finire per leggere un'estrazione
' ho scelto la ruota di bari per separare le estrazioni, ma si potrebbe usare la data
Dim inizio As Integer
Dim fine As Integer
Dim pos As Integer = sender.value ' valore della scrollbar
' cancello le ultime tre righe delle textbox, che possono contenere vecchi dati
For i = 48 To 65
Caselle(i).Text = ""
Next
' cerco all'indietro la ruota di bari partendo da pos (valore della scrollbar)
Do
If RecordArchivioTXT(pos).Contains("BA") Then
inizio = pos ' ruota di bari trovata
Exit Do
End If
pos -= 1
Loop
' cerco in avanti la ruota di bari partendo dalla posizione già trovata
pos = inizio + 1
Do
If RecordArchivioTXT(pos).Contains("BA") Then
fine = pos - 1 ' ruota di bari trovata
Exit Do
End If
pos += 1
' evito di andare a cercare fuori range
If pos > RecordArchivioTXT.Count() - 1 Then
fine = RecordArchivioTXT.Count() - 1
Exit Do
End If
Loop
' tra inizio e fine ci sono tutte le righe di un'estrazione
Dim ind = 0
For pos = inizio To fine
Dim str As String = RecordArchivioTXT(pos)
Dim strArr() As String = str.Split()
lblData.Text = strArr(0) ' la data sulla label
' una riga sulle rispettive 6 textbox
For i = 0 To 5
Caselle(ind + i).Text = strArr(i + 1)
Next
ind += 6 ' incremento per scrivere sulle 6 textbox successive
Next
Me.Refresh()
End Sub
End Class
Non è un esempio e si può ottimizzare alla grande, ma visto che lo avevo scritto, ti può servire per qualche spunto, è commentato ma chiedi pure.
Scusa se ho liqidato la questione SQL in modo superficiale,
nessuno ti ha ragguagliato dettagliatamente.
Ho provato il tuo codice e funziona alla grande, stavo solo guardando se potevo adattarlo al mio form estenticamente migliore, ma questa non vuole essere una critica anzi e stato fatto di più di quello che mi aspettavo. Mi sa che qui ci va il cesto per Natale!
La logica del dodice funziona alla grande, però come dicevi tu prima ci sono un tot di ruote, poi aumenta, poi diminuisce (forse a causa della guerra), poi riaumenta, poi esce la Nazionale. A questo punto sia che utilizzi un Database o meno pensavo se creare uno schema come ci si trova attualmente con le 11 ruote lasciando scempre la ruota Nazionale per ultima e con un controllo dove la ruota che non c'è estrazione riempire con degli zeri, difatti stavo anche pensando se davanti ai numeri che vanno da 0 a 9 aggiungere uno zero per avere un campo sempre di 2, ma magari questo e un dettaglio non fondamentale.
Una volta l'archivio era così strutturato: num concorso(settimana),data, Tutti e i 50 estratti (BA1,BA2,VE4,VE)
Ora hanno deciso di strutturarlo così. Difatti da qualche parte devo avere un archivio stutturato come la prima ipotesi in formato Access (una volta lo davano anche così
, magari il formato txt gli occupa meno spazio sul server, che parte addirittua dal 1871 immagino che li le ruote siano ancora meno.
Almeno avessero messo lo schema con cui salvano i dati sti qua della lottomatica.
La logica su cui vorrei lavorare è questa:
1) Si osserva un qualsiasi numero (a) estratto nell'ultima settimana (la chiameremo BASE), in una qualsiasi ruota delle 10 a disposizione (Bari - Cagliari - Firenze - Genova - Milano - Napoli - Palermo - Roma - Torino e Venezia);
2) Il numero (a) fa parte, per forza di cose, di una tripla i cui altri due componenti (b, c) verranno ricercati risalendo INDIETRO per le 20 ultime settimane precedenti quella che abbiamo a BASE;
3) Se in dette settimane è uscito per primo il numero (b), si giocheranno i numeri (a, c), mentre se è uscito per primo il numero (c) si giocheranno i numeri (a, b): si scarta, cioè, il numero trovato per primo nelle 20 settimane prese in considerazione;
4) Se nelle stesse 20 settimane NESSUNO dei numeri (b, c) è uscito, li si giocherà entrambi, cioè si scarta il numero (a). Lo stesso avviene quando i due numeri (b, c) escono entrambi nella stessa settimana.
Dopo tutto questo tram-tram le giocate andranno effetuate con una tabella puntate ed una sualogica, quindri dovrei anche sapere quelle in corso e a che punto sono, forse un database a questo punto mi ci vorrà per forza.
Scusa volevo anche chiederti un cosiglio visto che un in un Access vecchio oltre al campo indice, c'era anche un campo concorso immagino sarebbe un casino avere un controllo su questo visto che una volta le estrazioni erano solo una volta alla settimana il sabato, ora sono 3 martedi-giovedi-sabato.
Volevo chiederti se puoi dare un'occhio dove ho risposto a nessuno anche per avere una tua opinione sempre che non se la prenda.
Per tutto quello fatto finora e anche i consigli dati da altri non so come ringraziarvi.