Novità

Mente da programmatore

Allora nell'array per i nomi della sorte posso risolvere con una sub nella struttura(suppongo si questo l'errore) . Per quanto riguarda la funzione inizializzato nel progetto l'ho corretto in seguito perché mi sono reso conto dell'errore attraverso il debug infatti generando volontariamente un errore mi considerava sempre lenght 1 ... Al terzo punto non ci avevo proprio pensato ... Grazie davvero per il tuo aiuto 😃 sto iniziando a capire un mondo di cose ...assurdo ragazzi ...
 
Si procedo appena possibile. Ho avuto un piccolo contrattempo. Teoricamente dovrei caricare i valori della struttura all'interno di variabili che poi andranno a concatenarsi in una stringa restituita dalla funzione.
Dichiaro variabili
Assegno valore da struttura
Genero stringa
Return stringa
In teoria dovrebbe essere così. Nella pratica controllerò
 
devi prendere i valori della struttura e ricostruire una stringa con lo stesso formato di quella letta dall'archivio.
Questo servirà per la funzione che faremo poi che scrivera i dati sul file.

quindi la funzione deve tornare una stringa con la concatenazione di tutti i valori con la giusta sequenza e con gli spazi a copertura dei vari campi , per esempio il primo valore della stringa è l'id estrazione ed è formattato a 9 spazi , il numero estrazione per esempoio a 3 spazi , i numeri estratti sono formattati con due 0.

insomma deve risucirti fuori una stinga della lunghezza di 189 byte che rappresenta il record del nostro archivio.
Con record tutti della stessa lunghezza poi potremo scrivere anche in mezzo al file con faciiità perche possiam ocalcolare l'offset.

dovrai crerarti una funzione di suppporto che faccia come il formatSpace delllo spazioscript
 
c'è anche un altro errore con la classe archivio , è ver oche è globale ma poi quando la istanzi usi dinuovo il dim e questo fa si che stai creando una classe locale alla procedura dove c'è questa istruzione , non devi fare dim quando la istanzi ma solo archivio = new classe
 
Allora la funzione FormatSpace l'ho fatta così:

Codice:
    Function FormatSpace(ByVal aRecord As String, nLunghezza As Integer, carattere As Char, Optional aDestra As Boolean = False) As String
        Dim Stringreturned As String
        If aDestra = False Then
            Stringreturned = aRecord.PadLeft(nLunghezza, carattere)
        ElseIf aDestra = True Then
            Stringreturned = aRecord.PadRight(nLunghezza, carattere)
        End If
        Return Stringreturned
    End Function

Mentre la function StructArchivioToRecordArchivio l'ho iniziata così:

Codice:
    Private Function StructArchivioToRecordArchivio(strctEst As StrEstrazione) As String
        strctEst.DimensionaRuote()
        Dim structString As String = ""
        Dim id As String = FormatSpace(strctEst.identifier, 9, " ")
        Dim numero As String = FormatSpace(strctEst.Data.Numero, 3, " ")
        Dim data As String = FormatSpace(Replace(strctEst.Data.Data, ":", "/"), 0, "")
               
                 'manca del codice
               
        structString = id & ";" & numero & ";" & data & ";" & estratto & ";"
        Return structString
    End Function

prima di far danni ... sto proseguendo nel modo corretto? ahaha
 
Se la strada è giusta penso di aver finito:

Codice:
 Private Function StructArchivioToRecordArchivio(strctEst As StrEstrazione) As String
        Dim structString As String = ""
        Dim strnum As String = ""
        Dim i As Integer
        Dim id As String = FormatSpace(strctEst.identifier, Len(strctEst.identifier) + 9, " ")
        Dim numero As String = FormatSpace(strctEst.Data.Numero, 3, " ")
        Dim data As String = FormatSpace(Replace(strctEst.Data.Data, ":", "/"), 0, "")
        Dim estratto() As String
        For r = 1 To 11
            For e = 1 To 5
                i += 1
                ReDim Preserve estratto(i)
                If strctEst.Ruote(r).Estratto(e) = 0 Then
                    estratto(i) = FormatSpace(strctEst.Ruote(r).Estratto(e), 2, "0")
                Else
                    estratto(i) = strctEst.Ruote(r).Estratto(e)
                End If
                strnum = strnum & estratto(i) & ";"
            Next

        Next
        structString = id & ";" & numero & ";" & data & ";" & RimuoviUltimoCar(strnum, ";")
        'verifica lunghezza
        Dim h As Integer = Len(structString)
        Return structString
    End Function
 
Buon giorno. Ieri sono stato a letto con un po di dolorini.
Oggi resto sempre a letto ma cerco di seguire.
Bel lavoro.
Tutto completamente nuovo.
Bello il padleft .
Edo come mai hai usato aRecord e non sRecord? Sembra una stupidaggine ma qua è tutto nuovo e volevo capire se si può passare direttamente un array.
Grazie .
Buon lavoro.
Se riesco a trovare un vecchio libro che ho da qualche parte provo a studiare un po.
 
bene , allora

1)
ha ragione Legend , cerca di seguire un metodo per chiamare le variabili. aRecord fa pensare ad un array , una stringa falla iniziare con il carattere minuscolo "s" sRecord è meglio.
Le variabili boooleane falle iniziare con una "b" minuscola , bDestra ad esempio è meglio , una variabile numerica intera potrai farla iniziare con "n" minuscolo


2)
Codice:
If aDestra = False Then
            Stringreturned = aRecord.PadLeft(nLunghezza, carattere)
        ElseIf aDestra = True Then
            Stringreturned = aRecord.PadRight(nLunghezza, carattere)
        End If

per la serie se non è zuppa è pan bagnato , non complicare il codice , ElseIf serve se ci sono piu di 2 scelte , quindi qui non serve , inoltre la sintassi
"if b then" sottintende che b sia true

quindi il tuo codice puo diventare If bADestra then , else , endif

3)
La concatenazione delle stringhe è un'perazione dispendiosa si puo fare ma è meglio usare la classe offerta dal dot net StringBuilder.
Devi fare l'imports del namespace System.Text dopo potrai dichiarare

Codice:
dim SB as new stringBuilder 
sb.append (formatSpace ( strctEst.identifier , 9 , " " , false) )
sb.append (";")
sb.append (strctEst.Data.Numero , 3, " " , false)
sb.append (";")
...
...

return sb.tostring

4)
Nella routine che crea la strringa apartire dalla struttura non c'è bisogno di creare un array per gli estratti.
Il cclo ruote/posizioni va bene , devi solamente accodare allo stringbuilder l'estratto formattato con gli "0"


5) sposta tutte le routine che svolgono un lavoro di supporto nel modulo Assistente , come ad esempio NumeroValido e se ne trovi qualche altra fai lo stesso.


6)
nel modulo Assistente crea una funzione

IsEstrazioneValida ( strctEst as strEstrazione) as boolean

Questa funzione torna true se l'estrazione è valida.
Quando è valida un 'estrazione ? Se i numeri delle ruote sono ripetuti sulla stessa ruota gia non è valida , se un numero è minore di 0 o maggiore di 90 non è valida , se i membri che identificano l'id , il numoro estrazione , l'indicemensile sono 0 non è valida .
Per questa funzione ti sarà utile creare una funzione di supporto

Function QuantitaNumeriDiversi(aN() As Integer) As Integer

Questa funzione riceve in pasto un array e deve tornare quanti numeri diversi ci sono , ovviamente serve per il nostro lotto quindi puo gestire solo i numeri da 1 a 90 nota che non dve considerare il numero 0 , passando a questa funzione i numeri delle ruote se ottieni un valore diverso da 0 o da 5 i numeri di quella ruota non sono validi.

7)
va scritta una funzione nella classe archivio
Friend Function GetEstrazione(id As Integer, ByRef strctEst As StrEstrazione) As Boolean
torna true se riesce a leggere l'estrazione specificata dall'id , nota che è dichiarata Friend per poter esporre una funzione che usa una structure che non è un tipo di base.

8) va scritta una proprietà readonly nella classe archivio che torna la quantita di estrazioni presenti nell'array


9) va scritta una funzione nella classe archivio
Friend Function ScriviEstrazione(idEstr As Integer, strctEst As StrEstrazione) As Boolean

questa funzione dovra sostituire o aggiungere in funzione dell'id, un'estrazione all'array delle estrazioni , se l'id è maggiore di 1 rispetto alle estrazioni totali deve ridimensionare l'array ovviamente , in tutti i casi l'estrazioen dovrà essere trasformata in una stringa e salvata su disco , quindi sapendo
che il record dell'archivio è lungo 189 byte e che ogni linea nel file termina con i caratteri ascii 13 10 (vbCrLf) ogni record sarà lungo 191 byte.
Bisogna calcolare l'offset dal quale iniziare a scrivere la stringa dell'estrazione e usare la classe file per scrivere i dati sul file.

Codice:
nOffset = ((idEstr - 1) * nLenRiga) + 1
        sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf

        Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)

        Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
        objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
        objFile.Write(aB, 0, aB.Length)
        objFile.Close()
        objFile.Dispose()
 
In realtà è stato un errore di disattenzione 😂 ahaha grazie per avermelo fatto notare 😂 ... Comunque ieri sera dopo aver effettuato dei test ho notato che comunque non riesco ad ottenere la stessa lunghezza in byte 😕 non riesco a comprendere il motivo ..
 
In realtà è stato un errore di disattenzione 😂 ahaha grazie per avermelo fatto notare 😂 ... Comunque ieri sera dopo aver effettuato dei test ho notato che comunque non riesco ad ottenere la stessa lunghezza in byte 😕 non riesco a comprendere il motivo ..

FormatSpace(strctEst.identifier, Len(strctEst.identifier) + 9, " ")

gia solo per questo i byte non dovrebebro combaciare :-) ... comunque vedi i punti che ti ho detto sopra.

poi riposta il progetto con le modifiche.


ciao ..
 
Prima parte modificata:

Codice:
    Private Function StructArchivioToRecordArchivio(strctEst As StrEstrazione) As String
        Dim SB As New StringBuilder

        SB.Append(FormatSpace(strctEst.identifier, 9, " ", False))
        SB.Append(";")
        SB.Append(FormatSpace(strctEst.Data.Numero, 3, " ", False))
        SB.Append(";")
        SB.Append(FormatSpace(Replace(strctEst.Data.Data, ":", "/"), 0, ""))
        SB.Append(";")
        For r = 1 To 11
            For e = 1 To 5
                SB.Append(FormatSpace(strctEst.Ruote(r).Estratto(e), 2, "0"))
                SB.Append(";")
            Next
        Next
        SB.Append(RimuoviUltimoCar(SB.ToString, ";"))
        Return SB.ToString
    End Function

Codice:
    Function FormatSpace(ByVal sRecord As String, nLunghezza As Integer, carattere As Char, Optional bDestra As Boolean = False) As String
        Dim Stringreturned As String
        If bDestra = False Then
            Stringreturned = sRecord.PadLeft(nLunghezza, carattere)
        Else
            Stringreturned = sRecord.PadRight(nLunghezza, carattere)
        End If
        Return Stringreturned
    End Function
 
sb.Append(Format(strctEst.Data.Data, "dd/MM/yyyy"))

importanti le maiuscole e minuscole ..
 
SB.Append(RimuoviUltimoCar(SB.ToString, ";"))
Return SB.ToString


qui sbagli , usa il metodo remove per rimuovere l'ultimo carattere

sb.Remove(sb.Length - 1, 1)
 
Ricapitolando:

Codice:
    Private Function StructArchivioToRecordArchivio(strctEst As StrEstrazione) As String
        Dim SB As New StringBuilder

        SB.Append(FormatSpace(strctEst.identifier, 9, " ", False))
        SB.Append(";")
        SB.Append(FormatSpace(strctEst.Data.Numero, 3, " ", False))
        SB.Append(";")
        SB.Append(FormatSpace(Format(strctEst.Data.Data, "dd/MM/yyyy"), 0, ""))
        SB.Append(";")
        For r = 1 To 11
            For e = 1 To 5
                SB.Append(FormatSpace(strctEst.Ruote(r).Estratto(e), 2, "0"))
                SB.Append(";")
            Next
        Next
        SB.Remove(SB.Length - 1, 1)
        Return SB.ToString
    End Function

poi ...

Codice:
    Public ReadOnly Property QuantitaEstrazioni() As Integer
        Get
            Return UBound(Estrazioni)
        End Get
    End Property

poi...
Codice:
    Function IsIdEstrValido(id As Long) As Boolean
        Dim idestr As Boolean
        If id > 0 And id <= cArchivio.QuantitaEstrazioni Then
            idestr = True
        End If
        Return idestr
    End Function
    
    Function IsIdPosValido(id As Integer) As Boolean
        Dim idpos As Boolean
        If id > 0 And id <= 5 Then
            idpos = True
        End If
        Return idpos
    End Function
    
    Function InNumeroValidoLotto(n As Integer) As Boolean
        Dim valido As Boolean
        If n > 0 And n <= 90 Then
            valido = True
        End If
        Return valido
    End Function
    
    Function IsNumeroEstrValido(n As Integer) As Boolean
        Dim isnum As Boolean
        If n > 0 Then
            isnum = True
        End If
        Return isnum
    End Function
    
    Function IsIndiceMensileValido(n As Integer) As Boolean
        Dim isim As Boolean
        If n > 0 Then
            isim = True
        End If
        Return isim
    End Function
 
ottimo , fai anche le altre cose che ti ho detto e poi riposta il progetto aggiornato in vbnet cosi vediamo come procede.
 
Luigi in spazioscript hai praticamente replicato tutti i metodi del vb.
Ti credo che è facile fare gli script. Vi sto leggendo e studiando.
Complimenti ad Edo. 👍
appena Edoardo posta il progetto scaricalo , aprilo e fai le domande che ritieni opportune per iniziare ad immergerti in questo nuovo ambiente.
 
Poi la funzione friend:

Codice:
    Friend Function GetEstrazione(idEstr As Integer, RetEstr As StrEstrazione) As Boolean
Dim GetEstr as Boolean  
        If IsIdEstrValido(idEstr) Then
            RetEstr = Estrazioni(idEstr)
            GetEstr  = True
        End If
       return GetEstr 
    End Function

Poi ho aggiunto queste funzioni su cui ho un dubbio ... procedo nel modo corretto?

Codice:
    Function IsEstrazioneValida(strctEst As StrEstrazione) As Boolean


        If IsIdEstrValido(strctEst.identifier) Then
            If IsNumeroEstrValido(strctEst.Data.Numero) Then
                If QuantitaNumeriDiversi(GetArrayEstratti(strctEst)) = ? Then

                End If
            End If

        End If
    End Function
   
    Function QuantitaNumeriDiversi(aN() As Integer) As Integer

    End Function

    Function GetArrayEstratti(strctest As StrEstrazione) As Integer()
        Dim aN() As Integer
        Dim i As Integer
        For r = 1 To 11
            For e = 1 To 5
                i += 1
                ReDim Preserve aN(i)
                aN(i) = strctest.Ruote(r).Estratto(e)
            Next
        Next
        Return aN
    End Function
End Module
 
Siete i miei tre super moschettieri... programmatori preferiti... vi ammiro.., e invidio... (positivamente) dal divano... con il popcorn in mano... :LOL: :D 💪👌 👏 Good 1.11 👋:)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 11 gennaio 2025
    Bari
    73
    43
    01
    58
    81
    Cagliari
    69
    60
    18
    02
    10
    Firenze
    25
    32
    18
    55
    54
    Genova
    48
    05
    40
    34
    69
    Milano
    10
    07
    70
    44
    79
    Napoli
    11
    89
    01
    34
    80
    Palermo
    37
    80
    82
    44
    77
    Roma
    78
    04
    38
    39
    56
    Torino
    08
    13
    30
    27
    24
    Venezia
    56
    75
    36
    18
    70
    Nazionale
    63
    83
    19
    31
    80
    Estrazione Simbolotto
    Bari
    35
    34
    12
    23
    20
Indietro
Alto