JavascriptProva

martedì 20 agosto 2013

Aggiunta di records a un file ad accesso casuale.

Bah...
Non sono riuscito a capire la differenza fra Input e LineInput.
Ci torneremo...

Per ora fammi un po' esplorare l'accesso casuale, che dovrebbe essere quello che più mi interessa ai fini del programma che voglio realizzare.
Anche il mio è, in fondo, un accesso casuale al problema...

Ecco: per realizzare una tabella su un file, bisogna dichiarare una struttura.
Ci provo...

Structure Persona
    <VBFixedString(10)> Public Nome As String
    Public Peso As Integer
    Public Altezza As Double
End Structure


Sono ammattito a mettere su un codice che inserisse nuovi records in un file ad accesso casuale...
Ogni tanto succede che per una distrazione si facciano degli errori banali e ci si perda tempo.
Comunque ecco il codice che aggiunge dieci persone di nome Ciccio con lo stesso peso e altezza in un file aperto ad accesso casuale:
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Uomo As Persona
        Dim nRecords As Integer
        Uomo.Nome = "Ciccio"
        Uomo.Altezza = 170
        Uomo.Peso = 80
        FileOpen(1, "C:\Users\Antonello\Documents\FileProva", OpenMode.Random, , , Len(Uomo))
        For n = 1 To 10
            nRecords = LOF(1) / Len(Uomo)
            FilePut(1, Uomo, nRecords + 1)
        Next
        FileClose(1)
    End Sub
End Class

Structure Persona
     Public Nome As String
    Public Peso As Integer
    Public Altezza As Integer
End Structure
Certo, non ha senso aggiungere dieci persone con gli stessi parametri in un file, ma mi serviva per definire lo scheletro della questione, successivamente si penserà a come inserire records diversi.
7 In particolare, il problema era individuare l'ultimo record in modo da aggiungere i record successivi al posto giusto.
La chiave di tutto è nella linea di codice
nRecords = LOF(1) / Len(Uomo)
...che dividendo la lunghezza del file per la lunghezza del record ottiene il numero di records.
Avevo trovato in rete una soluzione incredibilmente cervellotica, che consisteva nel porre uno dopo l'altro i record in una variabile facendo avanzare una variabile-contatore, ma anche se il risultato è lo stesso è come usare i calcoli infinitesimali per fare due più due...

Nessun commento:

Posta un commento