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()