LEZIONE 24 – I DATI GESTITI DALL’MSX (3° PARTE)

da | Mar 2, 2024 | MSX BASIC | 0 commenti

Un caro saluti a tutti. Oggi chiuderemo questo argomento, parlerò dei file ad accesso diretto o random. Ma prima, come avevo accennato nella scorsa puntata, darò una piccola spiegazione sul programma. Innanzitutto, la prima cosa da dire
è che ho usato un comando di cui non ho ancora parlato: la gestione degli errori, ON ERROR GOTO. Ma lo farò, magari nella prossima lezione. Ho fatto questo perché, all’inizio il programma deve sapere se il file esiste, se questo non viene trovato, l’MSX segnalerà l’errore; File Not Found (File non trovato). Ma con l’intercettamento degli errori faremo in modo che se il file non esiste, verrà creato. Se invece il file è stato già creato il programma proseguirà aprendolo in modalità Append e caricherà tutti i dati dentro la matrice (Linea 20 … GOSUB 600), aggiornando il contatore CN. La subroutine inserimento, che va dalla linea 200 alla 295, dopo i dovuti controlli aprirà il file in APPEND. I dati verranno memorizzati dopo la nostra conferma. Potremo fare più inserimenti, il file sarà chiuso solo quando usciamo dalla suddetta routine. La modifica di uno o più campi (dalla linea 300 alla 390) verrà fatta dentro la matrice, visto che viene tutto memorizzato dentro di esse. All’uscita copierà tutte le matrici sul disco aprendo il file in modo OUTPUT, infatti scriverà il nuovo file modificato, eliminando quello vecchio. Sulla visualizzazione dei dati (linea 400 alla 460), non ho fatto variazioni, ho solo incolonnato i dati. Si poteva fare l’ordinamento e poi salvarlo su disco, ma lascio a voi questa incombenza. Invece, per chi volesse farlo su cassetta, è molto semplice, togliere tutte le aperture con APPEND e lavorare solo con le matrici. All’uscita del programma, aprire il file in OUTPUT e registrarlo, le procedure di scrittura e lettura sono uguali.

Adesso parliamo dei Files Random. Qual è la differenza tra i due? E’ presto detto.
Mentre sul primo, i sequenziali, per poter leggere un dato bisogna leggere tutti quelli che vengono prima, per il Radom possiamo andare direttamente su quel dato.
E un po’ più complesso rispetto al primo, ma è utile per lavorare con molti dati ed è anche più veloce. La prima cosa da dire, questo tipo di file può essere letto e scritto contemporaneamente, il problema grosso è che prima dobbiamo determinare la lunghezza dei record non superando i 256 caratteri. Per aprire il file useremo questa sintassi: OPEN “Nome File” AS #Numero porta LEN Lunghezza Record. La lunghezza del record deve essere la somma dei campi che lo formano, accetta solo caratteri alfanumerici, perciò tutti i valori numerici dovranno essere convertiti in stringhe. Cominciamo a fare un esempio prendendo il programma precedente, che ha nell’inserimento il limite. Sono 38 caratteri.

600 OPEN “AGENDA.DAT” AS #1 LEN=38

610 FIELD #1, 10 AS N1$, 18 AS I1$, 10 AS T1$

il Nostro file creato ha un record di 38 caratteri, con la funzione FIELD lo abbiamo suddiviso in 3 campi. La somma di essi deve corrispondere al dato inserito alla creazione del file. Per salvare un record nel file dobbiamo usare la funzione PUT # numero porta, numero Record, numero porta nel nostro caso è 1, mentre numero record è il numero che vogliamo dare, certamente daremo sempre il numero più basso libero, altrimenti sostituirebbe tutti i dati che ha dentro. Prima di salvarlo dobbiamo convertirlo. Useremo LSET se vogliamo scriverlo a partire da sinistra o RSET da destra, molto meglio usare LSET. Come avete visto, nella creazione dei campi ho usato delle variabili diverse, il motivo è che non devono essere uguali a quelli usati dal programma.

620 LSET N1$=N$

630 LSET I1$=I$

640 LSET T1$=T$

650 PUT #1, 1

Abbiamo inserito il nostro record nel file. Essendo il primo ho messo il numero 1 ma si può anche usare una variabile, la NS che usiamo per il conteggio dei record sul programma precedente. Non è il nostro caso ma se nel programma ci fosse stata una variabile numerica chiama ad esempio R, dovevamo convertirla con la funzione MKI$ se fosse stata intera, MKS$ se fosse stata di singola precisione o MKD$ se invece fosse stata a doppia precisione. Ammettiamo che la nostra variabile fosse stata intera, per prepararla ad essere salvata sul file, la sintassi corretta sarebbe stata come segue: LSET R$=MKI$(R) . Per leggere i dati useremo la funzione GET # Numero porta, Numero record

700 GET #1, 1

710 PRINT N1$; i1$; T1$

Anche qui, se dobbiamo convertire una delle variabili in numerica, prendendo l’esempio di sopra con la variabile R$, useremo le funzioni CVI per gli interi, CVS per la singola precisione e CVD per la doppia precisione: R=CVI(R$). Il comando CLOSE chiude il o i files aperti, come ho già spiegato nei files sequenziali. Infine, se vogliamo sapere l’ultimo record letto o scritto, useremo la funzione LOC(numero porta), restituirà il numero del record, s’intende che dovrà essere usato con il file aperto: PRINT LOC(1) oppure NR=LOC(1)

Prima di chiudere questa lezione parlerò del comando MERGE, dovevo farlo all’inizio di questo argomento (Parte 1), ma mi è sfuggito, risolviamo subito. Il suddetto comando serve a concatenare 2 files programma. Per fare questo il programma deve essere salvato con il comando SAVE in modo ASCII, questo si fa aggiungendo la lettera A alla fine: SAVE “Nome File”, A , altrimenti non è fattibile. Il MERGE aggiungerà pari pari tutto il file a quello in memoria, perciò se ci saranno linee con lo stesso numero li sostituirà. Prestate attenzione quando fate questo. Un ultima cosa importante, se il files residente è molto grosso e altrettanto lo sarà quello che aggiungeremo, superando così la capienza della RAM, verrà segnalato un errore: Out of Memory.

E con questo e tutto. Grazie ed alla prossima.

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

Buongiorno a tutti, In questa puntata parlerò di un interrupt importante, specialmente per i giochi, quando vogliamo far apparire un nemico all'improvviso o un oggetto utile, ma anche per creare un cronometro o un orologio e tante altre cose. Il COMANDO sfrutta il...

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

LEZIONE 21 – MSX e la musica

L'MSX ha un ottimo chip sonoro che può 'suonare' tre voci contemporaneamente. Iniziamo con il commando classico che sentiamo spesso in vari programmi o quando avviene un errore. Il suo nome è BEEP, cioè scrivendo il nome di questo comando riproduciamo questo suono. E'...

it_ITIT_IT