L'ISTRUZIONE READ DATA
L'istruzione READ DATA
permette di gestire dei dati che non variano da un'esecuzione all'altra del
programma.
I dati vengono definiti all'interno del programma con
l'istruzione DATA e poi gestiti con l'istruzione READ.
I dati registrati
nel programma con l'istruzione DATA possono essere solo letti e non
modificati.
Ogni riga di dati deve iniziare con l'istruzione DATA (si dice
anche che si tratta di una riga DATA); i dati vanno scritti separati da
virgole.
DATA costante [, costante]...
L'istruzione READ
permette di leggere i dati.
READ elencovariabili
Viene
letto un dato per ogni variabile indicata; il dato letto viene assegnato alla
variabile corrispondente. Bisogna fare attenzione che le variabili con cui si
leggono i dati siano di tipo compatibile con i dati stessi.
Le
istruzioni DATA possono essere definite soltanto nel programma principale e non
in sottoprogrammi o funzioni.
La posizione delle istruzioni DATA e READ
è indipendente; le righe DATA possono precedere o seguire l'istruzione
READ e possono non essere righe successive. Conviene comunque raggrupparle tutte
all'inizio o alla fine del programma.
L'ISTRUZIONE RESTORE
La lettura dei dati viene gestita tramite un
puntatore, cioè un segnale che indica qual è il prossimo dato da
leggere; all'inizio del programma il puntatore è posizionato sul primo
dato della prima istruzione DATA; ad ogni lettura il puntatore si sposta sul
dato successivo.
L'istruzione RESTORE riporta il puntatore all'inizio,
permettendo di ricominciare la lettura dal primo dato.
PROGRAMMA 12 -
QUESTIONARIO SUI CAPOLUOGHI DI REGIONE
Questo programma propone il nome
delle regioni chiedendo all'utente di inserire il relativo capoluogo di regione.
La risposta inserita viene controllata ed eventualmente viene fornita la
risposta esatta.
Questo algoritmo non è generalizzabile agli altri
linguaggi poiché fa uso di una istruzione particolare del Basic: la READ
DATA; per realizzarlo in altri linguaggi è necessario memorizzare i dati
in un file (o facendo uso di vettori).
Con l'istruzione READ DATA il
programma risulta molto semplice, ma per modificare i dati è necessario
intervenire direttamente sul programma, e quindi conoscere la
programmazione.
Lo stesso programma si presta a creare questionari relativi
a molti argomenti diversi; esempi:
- questionario sui simboli ed elementi
in chimica;
- questionario sulla traduzione di parole da una lingua
all'altra;
- questionario sulle date in cui è si è verificato
un certo avvenimento storico;
- questionari geografici di vario tipo, ad
esempio sulle capitali degli stati europei o del mondo
ecc.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ REGIONE ¦alfanumerico ¦ output ¦nome della regione ¦
¦ CAPOLUOGO ¦alfanumerico ¦ output ¦nome del capoluogo ¦
¦ ¦ ¦ ¦di regione ¦
¦ RISPOSTA ¦alfanumerico ¦ input ¦capoluogo di ¦
¦ ¦ ¦ ¦regione creduto ¦
¦ ¦ ¦ ¦dall'utente ¦
¦ I ¦numero intero¦ interno ¦indice del ciclo ¦
¦ ¦ ¦ ¦di ripetizione ¦
¦ ¦ ¦ ¦sulle regioni ¦
+----------------------------------------------------------------+
Flow chart Programma 12Pseudocodifica (vedi
Figura)
1 inizio
2 per I da 1 a 10
3 lettura REGIONE e CAPOLUOGO
4 emissione richiesta capoluogo di REGIONE
5 lettura RISPOSTA
6 se RISPOSTA = CAPOLUOGO allora
7 emissione "Esatto"
8 altrimenti
9 emissione CAPOLUOGO
10 fine se
11 fine per
12 fine
2 Il ciclo viene ripetuto per il numero di dati
presenti.
3 Regioni e capoluoghi sono i dati preparati per il
questionario.
4-5 Richiesta del capoluogo all'utente.
da 6 a 10
Controllo della risposta ed emissione del messaggio "Esatto" o del capoluogo se
la risposta è errata.
Programma in Basic
10 REM Questionario sui capoluoghi di regione
20 FOR I% = 1 TO 10
30 READ REGIONE$, CAPOLUOGO$
40 PRINT "Qual è il capoluogo della regione
"; REGIONE$; "?"
50 INPUT RISPOSTA$
60 IF RISPOSTA$ = CAPOLUOGO$ THEN
70 PRINT "Esatto"
80 ELSE
90 PRINT "No è "; CAPOLUOGO$
100 END IF
110 NEXT I%
120 END
130 REM
140 REM Dati: regione e capoluogo
150 DATA VALLE D'AOSTA, AOSTA
160 DATA PIEMONTE, TORINO
170 DATA LOMBARDIA, MILANO
180 DATA TRENTINO ALTO ADIGE, TRENTO
190 DATA VENETO, VENEZIA
200 DATA FRIULI VENEZIA GIULIA, TRIESTE
210 DATA LIGURIA, GENOVA
220 DATA EMILIA ROMAGNA, BOLOGNA
230 DATA TOSCANA, FIRENZE
240 DATA UMBRIA, PERUGIA
250 DATA MARCHE, ANCONA
260 DATA ABRUZZO, L'AQUILA
270 DATA MOLISE, CAMPOBASSO
280 DATA LAZIO, ROMA
290 DATA CAMPANIA, NAPOLI
300 DATA PUGLIA, TARANTO
310 DATA BASILICATA, POTENZA
320 DATA CALABRIA, REGGIO CALABRIA
330 DATA SICILIA, PALERMO
340 DATA SARDEGNA, CAGLIARI
da 150 a 340 Definizione dei
dati; si può scrivere una regione su ogni riga come nell'esempio o anche
mettere più regioni diverse (regione e capoluogo) nella stessa istruzione
DATA; ciò che conta è solo l'ordine di scrittura dei
dati.
Conviene sempre porre le istruzioni DATA all'inizio o alla fine del
programma e comunque sempre raggruppate.
30 Istruzione di lettura dei
dati; ad ogni lettura vengono letti due dati, in successione, tra quelli
presenti nelle istruzioni DATA.
120 Termine del programma; se si volesse
inserire una richiesta di ripetere l'esecuzione del programma, riproponendo
quindi le domande, si dovrebbe utilizzare l'istruzione RESTORE per far
ricominciare dalla prima istruzione DATA la lettura dei dati.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Qual è il capoluogo della regione VALLE D'AOSTA? ¦
¦ ? AOSTA ¦
¦ Esatto ¦
¦ Qual è il capoluogo della regione PIEMONTE? ¦
¦ ? TORINO ¦
¦ Esatto ¦
¦ Qual è il capoluogo della regione LOMBARDIA? ¦
¦ ? MILANO ¦
¦ Esatto ¦
¦ Qual è il capoluogo della regione TRENTINO ALTO ADIGE? ¦
¦ ? TRENTO ¦
¦ Esatto ¦
¦ Qual è il capoluogo della regione VENETO? ¦
¦ ? VENEZIA ¦
¦ Esatto ¦
¦ Qual è il capoluogo della regione FRIULI VENEZIA GIULIA? ¦
¦ ? UDINE ¦
¦ No è TRIESTE ¦
¦ Qual è il capoluogo della regione LIGURIA? ¦
+----------------------------------------------------------------+
Commenti
Le
domande vengono poste sempre nello stesso ordine, quello con cui i dati sono
stati scritti nelle istruzioni DATA, e continuano finché tutti dati non
sono stati esauriti.
Una prima modifica da apportare al programma potrebbe
essere quella di non utilizzare un ciclo FOR per la presentazione delle domande,
ma un ciclo while o until, da interrompere su richiesta dell'utente.
Un
ulteriore miglioramento, che rende molto più utile il programma, è
quello di presentare le domande in ordine casuale. Per riuscire a fare
ciò bisogna prima di tutto leggere tutti i dati e caricarli in più
vettori corrispondenti, uno per ogni tipo di dato; per esempio nel caso proposto
dei capoluoghi di regione, si dovrebbe caricare un vettore con i nomi delle
regioni e uno con i nomi dei relativi capoluoghi.
Poi le domande devono
essere poste prendendo i dati dai vettori preparati, generando in modo casuale
la posizione dell'elemento di vettori da utilizzare di volta in
volta.
I FILE
Il Basic non offre una gestione molto efficiente
dei file; non è prevista la definizione di file ad organizzazione
sequenziale con indice, ma soltanto di file sequenziali e di file
relative.
I file relative vengono chiamati comunemente in Basic file random
(o ad accesso casuale).
Quando si usa un file non viene dichiarata
esplicitamente la sua organizzazione; il tipo di organizzazione dipende dal tipo
di apertura richiesto.
Per i file sequenziali non viene definito un
tracciato record, e i dati possono venire scritti in una sequenza qualunque,
purché poi si sappia che tipo di dato rileggere; non esiste quindi una
istruzione particolare per la scrittura sul file (nel senso di scrittura di un
record) ma si utilizzano le normali istruzioni PRINT e PRINT USING (o la WRITE
che è un'altra istruzione di output anche su video), specificando
soltanto che devono avere effetto sul file e non a video.
LA DEFINIZIONE DEI FILE
I file vengono definiti per mezzo dell'istruzione
di apertura del file (OPEN), specificando il nome e un numero che viene
associato al file e con cui si può fare riferimento al file stesso nel
corso del programma.
Il nome del file deve rispettare le caratteristiche
dei nomi di file per l'MS-DOS: il nome del file deve essere costituito al
massimo da 8 caratteri alfanumerici fra cui anche alcuni caratteri speciali
() {} @ # $ % ^ & ! - + / ~
al nome del file può seguire
un punto e un'estensione di tre caratteri.
E' possibile specificare anche
il drive e il percorso, cioè la directory, in cui si trova il file; se
non viene specificato nulla il file viene creato o cercato nella directory
corrente, sul drive corrente.
OPEN file$ [FOR modalità]
[ACCESS accesso] [blocco] AS [#]numfile% [LEN=lungrecord]
La frase
FOR modalità permette di specificare la modalità di apertura del
file; le modalità consentite sono:
OUTPUT : da usare per creare un
file sequenziale;
INPUT : da usare per leggere un file
sequenziale;
APPEND : da usare per aggiungere dati in fondo ad un file
sequenziale;
RANDOM : da usare per definire un file ad accesso casuale
(è la modalità predefinita; questo significa che, se non si
specifica la frase FOR, il file verrà considerato comunque ad accesso
casuale).
Esiste anche la modalità BINARY o modalità
binaria, che permette di leggere e scrivere dati nel file con le istruzioni GET
e PUT in una posizione espressa in byte.
[#]numfile% è un
numero da 1 a 255 che viene associato al file e può essere utilizzato per
fare riferimento al file invece del nome.
La funzione FREFILE
dà il primo numero non usato per i file.
La funzione FILEATTR
restituisce informazioni sul tipo di apertura di un file aperto.
La
frase LEN per i file sequenziali indica il numero di caratteri contenuto nel
buffer; il numero di caratteri predefinito è 512; per i file random
specifica la lunghezza del record; la lunghezza predefinita è
128.
Un altro formato per l'istruzione OPEN è
OPEN
modalità$, [#]numfile%, file$ [,lungrecord%]
dove
modalità può essere:
O : per la creazione di un file
sequenziale;
I : per la lettura di un file sequenziale;
A : per
l'aggiunta di dati in coda ad un file sequenziale;
R : per la definizione
di un file ad accesso casuale;
B : per la definizione di un file in formato
binario.
L'UTILIZZO DI FILE IN AMBIENTE DI RETE
Quando si lavora in un ambiente di rete
più utenti possono accedere allo stesso disco, e quindi a file creati o
utilizzati da altri.
La frase ACCESS dell'istruzione OPEN permette di
specificare il tipo di accesso consentito, cioè se è possibile
scrivere sul file o soltanto leggerlo, o, solamente per i file ad accesso
casuale, effettuare entrambe le operazioni.
ACCESS {READ WRITE READ
WRITE}
La parola blocco serve per gestire l'utilizzo contemporaneo
del file da parte di più utenti.
Può essere indicata una
delle modalità:
SHARED : sta ad indicare che il file è
condiviso;
LOCK READ : sta ad indicare che il file viene bloccato
(cioè non viene permesso l'accesso ad altri) quando si esegue una
operazione di lettura;
LOCK WRITE : sta ad indicare che il file viene
bloccato quando si esegue una operazione di scrittura;
LOCK READ WRITE :
sta ad indicare che il file viene bloccato quando si esegue una operazione di
lettura o di scrittura;
Esistono anche delle istruzioni per bloccare
e sbloccare il file nel corso dell'esecuzione del programma.
LOCK
[#]numerofile% [,{record&
[Inizio$] TO fine$}]
UNLOCK [#]numerofile%
[,{record&
[Inizio$] TO fine$}]
Per i file sequenziali le
istruzioni LOCK e UNLOCK hanno effetto su tutto il file; per i file ad accesso
casuale è possibile indicare il numero del record da bloccare, o il
numero del primo e dell'ultimo record di un intervallo.
L'ISTRUZIONE CLOSE
Quando il lavoro su un file è terminato,
il file deve essere chiuso con l'istruzione CLOSE. Questa istruzione libera
spazio in memoria e assicura che tutti i dati siano registrati
correttamente.
CLOSE [[#]numerofile% ...]
senza argomenti
chiude tutti i file.
LE ISTRUZIONI PER OPERARE SUI FILE SEQUENZIALI
Per scrivere dati in un file sequenziale si
possono usare le istruzioni PRINT, PRINT USING e WRITE.
PRINT
[#numerofile%] [elencoespressioni] [{;|,}]
PRINT [#numerofile%] USING
stringaformato$; elencoespressioni [{;|,}]
WRITE [#numerofile%]
elencoespressioni
Se non è specificato un numero di file,
l'uscita va allo schermo.
Il comportamento delle istruzioni PRINT e PRINT
USING è già stato esaminato nel capitolo 26; l'istruzione WRITE
inserisce virgole tra più dati e racchiude tra virgolette le stringhe;
è particolarmente indicato per la scrittura sul file perché i dati
possono essere agevolemente riletti con l'istruzione INPUT.
Per leggere
dati da un file sequenziale si possono usare le istruzioni INPUT e LINE INPUT,
(già viste per l'input da tastiera) specificando il numero di
file.
INPUT #numerofile%, elencovariabili
LINE INPUT
#numerofile%, variabile$
LA FUNZIONE INPUT$
INPUT$(numcaratteri[,[#]numerofile%])
restituisce una stringa del numero di caratteri specificato, letta
dal file col numero indicato.
Può essere usata anche per l'input da
tastiera; i caratteri non vengono visualizzati sullo schermo e non è
necessario premere il tasto di invio.
LA FUNZIONE EOF
permette di stabilire se è stata raggiunta
la fine di un file squenziale.
EOF(numerofile%)
La funzione EOF
restituisce vero (il valore -1) se è stata raggiunta la fine del file,
cioè se la successiva operazione di input potrebbe causare un messaggio
di errore.
PROMEMORIA
Per creare un file sequenziale bisogna:
-
Aprire il file in output (o in append per aggiungere record) con l'istruzione
OPEN.
- Scrivere i dati sul file con le istruzioni PRINT, PRINT USING o
WRITE.
- Chiudere il file con l'istruzione CLOSE.
PROGRAMMA 13
- CREAZIONE DI UNA RUBRICA TELEFONICA
Questo programma permette di caricare
in un file sequenziale, nomi, indirizzi e numeri di telefono come in una rubrica
telefonica.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ RUBRICA ¦ file ¦ output ¦file dove vengono ¦
¦ ¦ sequenziale ¦ ¦registrati nomi, ¦
¦ ¦ ¦ ¦indirizzi e numeri ¦
¦ ¦ ¦ ¦telefonici ¦
¦ RISPOSTA ¦ alfanumerico¦ input ¦risposta alla ¦
¦ ¦ ¦ ¦richiesta di ¦
¦ ¦ ¦ ¦inserimento dati ¦
¦ NOMINATIVO¦ alfanumerico¦ input da ¦cognome e nome ¦
¦ ¦ ¦ tastiera, ¦della persona da ¦
¦ ¦ ¦ output su ¦inserire nella ¦
¦ ¦ ¦ file ¦rubrica ¦
¦ INDIRIZZO ¦ alfanumerico¦ input da ¦indirizzo della ¦
¦ ¦ ¦ tastiera, ¦persona da inserire¦
¦ ¦ ¦ output su ¦nella rubrica ¦
¦ ¦ ¦ file ¦ ¦
¦ TELEFONO ¦ alfanumerico¦ input da ¦numero di telefono,¦
¦ ¦ ¦ tastiera, ¦eventualmente ¦
¦ ¦ ¦ output su ¦con prefisso, della¦
¦ ¦ ¦ file ¦persona da inserire¦
¦ ¦ ¦ ¦nella rubrica ¦
+----------------------------------------------------------------+
tracciato
record del file RUBRICA :
+----------------------------------------------------------------+
¦ nome e cognome ¦ indirizzo ¦ numero telefonico ¦
+----------------------------------------------------------------+
Anche
se non esiste una definizione di tracciato record in Basic per i file
sequenziali, è bene descriverlo comunque dal punto di vista
logico.
Flow chart Programma 13Pseudocodifica (vedi Figura)
1 inizio
2 apertura del file RUBRICA in output
3 emissione richiesta di inserimento dati
4 lettura RISPOSTA
5 mentre RISPOSTA = "S"
6 emissione richiesta cognome e nome
7 lettura NOMINATIVO
8 emissione richiesta indirizzo
9 lettura INDIRIZZO
10 emissione richiesta numero di telefono
11 lettura TELEFONO
12 emissione sul file RUBRICA di NOMINATIVO INDIRIZZO
TELEFONO
13 emissione richiesta di continuazione
14 lettura RISPOSTA
15 fine mentre
16 chiusura file RUBRICA
17 fine
2 Apertura del file per la creazione; il file viene
aperto in output e quindi viene creato un file sequenziale. Se il file esiste
già i dati presenti vengono cancellati (o meglio si ricomincia comunque a
scrivere dall'inizio del file non considerando i dati già inseriti). Per
aggiungere dati a un file già esistente bisogna aprire il file in
append.
da 3 a 15 Ciclo di richiesta dei dati all'utente e registrazione
nel file. Il ciclo termina quando l'utente inserisce un carattere diverso da S
alla richiesta di continuazione.
da 6 a 11 Inserimento di nome, indirizzo e
numero di telefono da parte dell'utente.
7 Vanno inseriti nome e cognome,
separati da uno spazio; se poi si vuole eseguire un ordinamento è
necessario inserire prima il cognome e poi il nome. T possibile anche utilizzare
due variabili diverse per il nome e il cognome.
9 Inserimento
dell'indirizzo; può essere scritto nel formato preferito, e può
comprendere via, numero, città con eventuale codice postale, separati da
spazi. Anche in questo caso si potrebbero utilizzare variabili diverse per ogni
parte dell'indirizzo.
11 Inserimento del numero telefonico ed eventualmente
del prefisso, nel formato desiderato per esempio:
prefisso
numero
prefisso/numero
numero (prefisso) ecc.
12 Registrazione
dei dati sul file RUBRICA.
16 Chiusura del file.
Programma in
Basic
10 REM Creazione di una rubrica telefonica
20 OPEN "RUBRICA.DAT" FOR OUTPUT AS #1
30 PRINT "Ci sono dati da inserire?"
40 INPUT RISPOSTA$
50 DO WHILE RISPOSTA$ = "S"
60 PRINT "Inserire cognome e nome"
70 INPUT NOMINATIVO$
80 PRINT "Inserire l'indirizzo"
90 INPUT INDIRIZZO$
100 PRINT "Inserire il numero di telefono"
110 INPUT TELEFONO$
120 WRITE #1, NOMINATIVO$, INDIRIZZO$, TELEFONO$
130 PRINT "Altri dati da inserire?"
140 INPUT RISPOSTA$
150 LOOP
160 CLOSE #1
170 END
20 Apertura del file; nel programma si farà
riferimento al file con il numero 1. Il nome RUBRICA.DAT è il nome con
cui il file verrà creato sul disco; il file viene creato nella directory
corrente del drive corrente. Può essere specificata una directory o anche
un drive diverso dove creare il file completando il nome con il path
desiderato.
120 Registrazione dei dati sul file. Il file su cui scrivere
viene identificato dal numero 1 associato al file al momento
dell'apertura.
L'istruzione WRITE scrive i dati ponendo tra virgolette le
stringhe e inserendo una virgola tra un dato e l'altro. Si ottiene così
un formato facilmente leggibile con l'istruzione INPUT.
160 Chiusura del
file. T possibile anche scrivere CLOSE senza indicare il numero del file quando
tutti i file (in questo caso uno solo) devono essere chiusi. Se invece in un
programma che usa più file bisogna chiudere file diversi in momenti
diversi, è importante specificare il numero identificativo del
file.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inserire cognome e nome ¦
¦ ? BIANCHI GIOVANNA ¦
¦ Inserire l'indirizzo ¦
¦ ? VIA ROMA, 15 ¦
¦ Inserire il numero di telefono ¦
¦ ? 563124 ¦
¦ Altri dati da inserire? ¦
¦ ? S ¦
¦ Inserire cognome e nome ¦
¦ ? ROSSI GIORGIO ¦
¦ Inserire l'indirizzo ¦
¦ ? CORSO MILANO, 105 ¦
¦ Inserire il numero di telefono ¦
¦ ? 671154 ¦
¦ Altri dati da inserire? ¦
¦ ? S ¦
¦ Inserire cognome e nome ¦
¦ ? VERDI STEFANO ¦
¦ Inserire l'indirizzo ¦
¦ ? PIAZZA MARTIRI DELLA LIBERTA', 72 ¦
¦ Inserire il numero di telefono ¦
¦ ? 447631 ¦
¦ Altri dati da inserire? ¦
¦ ? N ¦
+----------------------------------------------------------------+
Commenti
Durante
l'esecuzione del programma, a video non appare nulla di ciò che il
programma fa; i più attenti noteranno l'accensione della spia che indica
che si sta lavorando sul disco.
Al termine del programma, guardando nella
directory, si troverà però il file RUBRICA.DAT creato dal
programma.
Il file esiste indipendentemente dal programma; i dati restano
registrati e possono venire utilizzati da altri programmi (anzi sono stati
registrati apposta).
Il prossimo programma mostrerà come possono
venire utilizzati i dati registrati nel file, stampando la rubrica
creata.
PROMEMORIA
Per leggere un file sequenziale bisogna: - Aprire
il file in input con l'istruzione OPEN.
- Assicurarsi ad ogni lettura che
il file non sia finito con la funzione EOF (prima della lettura, perché
il file potrebbe essere vuoto).
- Leggere i dati dal file con l'istruzione
INPUT.
- Chiudere il file con l'istruzione CLOSE.
PROGRAMMA 14 -
STAMPA DELLA RUBRICA TELEFONICA
Questo programma permette di stampare i
dati registrati nel file RUBRICA.DAT dal programma
precedente.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ RUBRICA ¦ file ¦ input ¦ file contenente ¦
¦ ¦ sequenziale ¦ ¦ nomi, indirizzi e ¦
¦ ¦ ¦ ¦ numeri telefonici ¦
¦ NOME ¦ alfanumerico¦ input da ¦ cognome e nome ¦
¦ ¦ ¦ file, output ¦ della persona ¦
¦ ¦ ¦ su video ¦ registrata ¦
¦ INDIR ¦ alfanumerico¦ input da ¦ indirizzo della ¦
¦ ¦ ¦ file, output ¦ persona registrata¦
¦ ¦ ¦ su video ¦ ¦
¦ TEL ¦ alfanumerico¦ input da ¦ numero di telefono¦
¦ ¦ ¦ file, output ¦ della persona ¦
¦ ¦ ¦ su video ¦ registrata ¦
+----------------------------------------------------------------+
I
nomi delle variabili utilizzate per leggere i dati registrati nel file possono
essere indifferentemente uguali o diversi da quelli delle variabili usate per la
registrazione; l'importante è che sia uguale la definizione e l'ordine
con cui vengono letti i dati.
tracciato record del file
RUBRICA:
+----------------------------------------------------------------+
¦ nome e cognome ¦ indirizzo ¦ numero telefonico ¦
+----------------------------------------------------------------+
Flow chart Programma 14Pseudocodifica (vedi
Figura)
1 inizio
2 apertura del file RUBRICA in input
3 emissione intestazione
4 mentre non è la fine del file
5 lettura dal file RUBRICA di NOME INDIR TEL
6 emissione NOME INDIR TEL
7 fine mentre
8 chiusura file RUBRICA
9 fine
2 Apertura del file per la lettura; il file viene
aperto in input, si tratta quindi di un file sequenziale, già esistente,
su cui si possono fare delle operazioni di lettura.
3 Stampa
dell'intestazione della rubrica.
da 4 a 7 Ciclo di lettura dei dati sul
file; la lettura termina quando si incontra il segnale di fine file.
5
Lettura di nome, indirizzo e numero di telefono dal file.
6 Emissione a
video o in stampa di nome, indirizzo e numero di telefono appena letti. In
genere i dati registrati in un file possono essere molti; conviene perciò
mandare l'output alla stampante. Se le righe di stampa sono più di 25 a
video si vedono soltanto i dati relativi alle ultime 25 persone; bisognerebbe
altrimenti predisporre l'output a video in modo che vengano mostrate alcune
righe per volta e che il programma chieda conferma prima di mostrare le
successive.
8 Chiusura del file.
Programma in
Basic
10 REM Stampa della rubrica telefonica
20 OPEN "RUBRICA.DAT" FOR INPUT AS #1
30 LPRINT "NOME"; TAB(20);
"INDIRIZZO"; TAB(60); "TELEFONO"
40 PRINT
50 DO WHILE NOT EOF(1)
60 INPUT #1, NOME$, INDIR$, TEL$
70 LPRINT NOME$; TAB(20); INDIR$; TAB(60); TEL$
80 LOOP
90 CLOSE #1
100 END
20 Apertura del file in input; il file viene cercato
nella directory corrente del drive corrente; è possibile comunque
specificare il path desiderato.
Se il file non viene trovato viene prodotto
un messaggio di errore.
50 La fine del file viene riconosciuta dalla
funzione EOF che vuole come argomento il numero di identificazione del file (non
preceduto dal carattere #). La funzione dà un risultato booleano: vero se
è stata raggiunta la fine del file, falso se è possibile
effettuare un'altra operazione di lettura.
60 Lettura dei dati dal file;
non esistendo una istruzione per la lettura di un record è possibile
leggere nome, indirizzo e numero di telefono con tre istruzioni INPUT separate.
L'istruzione INPUT è la normale istruzione di lettura usata per
l'inserimento dei dati da tastiera; il numero identificativo di file specifica
che la lettura deve avvenire appunto sul file.
70 Stampa dei dati
opportunamente incolonnati.
90 Chiusura del file numero
1.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ NOME INDIRIZZO TELEFONO ¦
¦ ¦
¦ BIANCHI VIA ROMA, 15 563124 ¦
¦ GIOVANNA ¦
¦ ROSSI CORSO MILANO, 105 671154 ¦
¦ GIORGIO ¦
¦ VERDI PIAZZA MARTIRI 447631 ¦
¦ STEFAN DELLA LIBERTA', 72 ¦
+----------------------------------------------------------------+
Commenti
Essendo
il file sequenziale, i dati vengono registrati nell'ordine con cui vengono
inseriti e non in ordine alfabetico.
Per ottenere in stampa i dati in
ordine alfabetico si dovrebbe provvedere all'ordinamento del file, o al
caricamento dei dati in un vettore e al suo ordinamento, al momento della
stampa.
Eseguendo l'ordinamento del file, si ottiene un ordinamento
permanente; cioè quando si richiede la stampa la si ottiene già
ordinata, senza perdite di tempo (l'operazione di ordinamento, anche di un
vettore, richiede un tempo piuttosto elevato rispetto alla sola lettura in
sequenza).
Bisogna ricordare però di rieseguire l'operazione di
ordinamento ogni volta che si inseriscono nuovi dati nella rubrica.
LE ISTRUZIONI PER OPERARE SUI FILE AD ACCESSO CASUALE
Per utilizzare un file ad accesso casuale bisogna
descriverne il tracciato record con l'istruzione FIELD, che alloca spazio per le
variabili in un'area di memoria, il buffer del file, mediante il quale viene
gestito l'inserimento dei dati e la successiva lettura.
FIELD
[#]numerofile% , larghcampo% AS variabilestringa$ [, larghcampo% AS
variabilestringa$]..
ESEMPI
Definizione di un tracciato record.
Viene definito un record di 53 byte, composto da tre campi alfanumerici, di cui
il primo composto da 20 caratteri, il secondo da 8, il terzo da
25.
FIELD #1, 20 AS NOME$, 8 AS DATANASCITA$, 25 AS
INDIRIZZO$
I dati da scrivere sul file devono essere preparati nel
buffer allocato con l'istruzione FIELD.
Per inserire i dati nel buffer di
un file random si usano le istruzioni LSET e RSET.
LSET
variabileStringa = stringa
RSET variabileSrringa = stringa
dove
variabileStringa è una variabile definita nell'istruzione FIELD per la
descrizione del tracciato record del file.
La differenza tra LSET e
RSET è che se i caratteri da inserire sono meno di quelli che possono
essere contenuti nel campo, LSET li allinea a sinistra, mentre RSET li allinea a
destra, completando le posizioni in eccesso con degli spazi.
I valori
numerici devono essere convertiti in stringhe prima di poterli memorizzare nel
buffer con le istruzioni LSET o RSET.
Esempi
Inserimento di dati
nel buffer di un file col tracciato descritto nell'esempio precedente.
LSET NOME$="GIUSEPPE NERINI"
LSET DATANASCITA$ =
"25/4/83"
LSET INDIRIZZO$ = "via ROMA, 58 - MILANO"
ALTRO USO DI LESET E RSET
Le istruzioni LSET e RSET possono essere usate
anche per inserire stringhe in variabili non definite con una istruzione FIELD;
ciò può essere utile per preparare in un formato opportuno un
testo da stampare.
Il record viene preparato prendendo i dati dal
buffer.
E' possibile indicare il numero del record su cui si vogliono
registrare i dati.
Per la lettura di un file ad accesso casuale si
usa l'istruzione GET, indicando eventualmente il numero del record che si
desidera leggere.
GET [#]numerofile% [[,numerorecord&]
I dati del record letto vengono trasferiti nel buffer del file. Si
può poi accedere ai campi del buffer, utilizzandoli nelle successive
istruzioni; i valori numerici, trasformati in stringhe al momento
dell'inserimento nel buffer, devono essere riconvertiti da stringhe a numeri
utilizzabili nei calcoli.
Le funzioni SEEK e LOC permettono di
conoscere la posizione corrente all'interno del
file.
SEEK(numerofile%)
LOC(numerofile%)
La
differenza tra le due funzioni è che la LOC restituisce il numero
dell'ultimo record scritto o letto, mentre la SEEK restituisce il numero del
record su cui avrà effetto la successiva operazione di lettura o
scrittura (naturalmente se non viene precisato il numero record nelle istruzioni
GET e PUT).
FUNZIONE DI CONVERSIONE
Le funzioni per la conversione di numeri in
stringhe per la memorizzazione in file ad accesso casuale
sono:
MKI$(espressione intera%)
MKL$(espressione intera
lunga&)
MKS$(espressione a precisione semplice!)
MKD$(espressione
a doppia precisione#)
La funzione MKI$ converte un numero intero in
una stringa di 2 byte.
La funzione MKL$ converte un numero intero LONG in
una stringa di 4 byte.
La funzione MKS$ converte un numero in precisione
semplice in una stringa di 4 byte.
La funzione MKD$ converte un numero in
doppia precisione in una stringa di 8 byte.
Per registrare nel file i
dati predisposti nel buffer si usa l'istruzione PUT.
PUT
[#]numerofile% [[,numerorecord&]
Le funzioni per riconvertire le
stringhe numeriche in numeri sono:
CVI(stringa numerica di 2
byte)
CVL(stringa numerica di 4 byte)
CVS(stringa numerica di 4
byte)
CVD(stringa numerica di 8 byte)
La funzione CVI converte
una stringa di 2 byte in un numero intero.
La funzione CVL converte una
stringa di 4 byte in un numero intero LONG.
La funzione CVS converte una
stringa di 4 byte in un numero in precisione semplice.
La funzione CVD
converte una stringa di 8 byte in un numero in doppia
precisione.
L'istruzione SEEK permette di posizionarsi sul record
desiderato.
SEEK #numerofile%, posizione&
USO DI SEEK E LOC CON I FILE SEQUENZIALI
Le funzioni SEEK e LOC e l'istruzione SEEK
possono essere usate anche per i file sequenziali o binari; in questo caso la
posizione viene espressa come numero di byte a partire dall'inizio del
file.
PROMEMORIA
Per creare un file random bisogna:
-
Aprire il file in modo random con l'istruzione OPEN.
- Definire il
tracciato record per allocare lo spazio nel buffer con l'istruzione
FIELD.
- Caricare i dati di un record nel buffer con l'istruzione LSET (o
RSET); i campi numerici devono prima essere convertiti in stringhe.
-
Registrare i dati nel file con l'istruzione PUT indicando il numero di record su
cui scrivere.
- Chiudere il file con l'istruzione CLOSE.
PROGRAMMA 15 - CREAZIONE DI UNA AGENDA
Questo programma
permette di registrare gli impegni di ogni giorno di un mese in un file con
accesso random. T possibile cioè registrare gli impegni di un giorno
qualsiasi, senza rispettare l'ordine di data.
Per ogni giorno desiderato
viene richiesta l'ora dell'impegno e la descrizione (un solo impegno per
giorno).
La ricerca degli impegni in un certo giorno viene presentata nel
programma successivo.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ AGENDA ¦ file random ¦ output ¦file dove ¦
¦ ¦ ¦ ¦registrare gli ¦
¦ ¦ ¦ ¦impegni giornalieri¦
¦ ¦ ¦ ¦di un mese ¦
¦ RISPOSTA ¦ alfanumerico¦ input ¦risposta alla ¦
¦ ¦ ¦ ¦richiesta di ¦
¦ ¦ ¦ ¦inizializzazione ¦
¦ ¦ ¦ ¦del file ¦
¦ GIORNO ¦numero intero¦ input ¦giorno in cui si ¦
¦ ¦ ¦ ¦vuole registrare un¦
¦ ¦ ¦ ¦impegno ¦
¦ OR ¦ alfanumerico¦ input ¦orario dell'impegno¦
¦ ¦ ¦ ¦da registrare ¦
¦ IMP ¦ alfanumerico¦ input ¦descrizione ¦
¦ ¦ ¦ ¦dell'impegno da ¦
¦ ¦ ¦ ¦registrare ¦
+----------------------------------------------------------------+
tracciato
record del file AGENDA:
+----------------------------------------------------------------+
¦ vuoto ¦ ora ¦ impegno ¦
+----------------------------------------------------------------+
+----------------------------------------------------------------+
¦ nome del campo ¦ tipo ¦ significato ¦
+-------------------+-------------------+------------------------¦
¦ VUOTO ¦ 1 carattere ¦ segnale che indica se ¦
¦ ¦ ¦ il record è utilizzato ¦
¦ ORA ¦ 5 caratteri ¦ orario dell'impegno ¦
¦ IMPEGNO ¦ 20 caratteri ¦ descrizione del- ¦
¦ ¦ ¦ l'impegno assunto ¦
+----------------------------------------------------------------+
Il
campo VUOTO può contenere due caratteri: uno segnala che il record
è inutilizzato, l'altro invece che il record contiene informazioni
valide; ciò è necessario perché quando si richiede la
lettura di un record, questo viene letto comunque, anche se non vi è
registrato nulla; non viene segnalato in alcun modo che il record non esiste.
Flow chart Programma 15 (prima parte)
Flow chart Programma 15 (seconda parte)Pseudocodifica
(vedi Figure)
1 inizio
2 apertura del file AGENDA in modo random
3 emissione richiesta di inizializzazione dell'agenda
4 lettura RISPOSTA
5 se RISPOSTA = "S" allora
6 emissione richiesta di conferma
7 lettura RISPOSTA
8 se RISPOSTA = "S" allora
9 VUOTO = carattere indicante record vuoto
10 per I da 1 a 31
11 registrazione dati nel record I del
file AGENDA
12 fine per
13 fine se
14 fine se
15 emissione richiesta giorno
16 lettura GIORNO
17 mentre GIORNO compreso tra 1 e 31
18 VUOTO = carattere indicante record occupato
19 emissione richiesta orario dell'impegno
20 lettura OR
21 emissione richiesta descrizione dell'impegno
22 lettura IMP
23 ORA = OR
24 IMPEGNO = IMP
25 registrazione dati nel record GIORNO del file
AGENDA
26 emissione richiesta giorno
27 lettura GIORNO
28 fine mentre
29 chiusura file AGENDA
30 fine
2 Apertura del file AGENDA in modo random; è
possibile agire sul file sia in input che in output; in questo programma si
agirà soltanto in output creando i record del file. Viene così
creato un file ad organizzazione relative.
3-4 Viene richiesto all'utente
se inizializzare o meno il file; se il file non esiste già i record
vengono inizializzati con un carattere che segnala che il record è vuoto;
ciò serve al programma per la ricerca di un impegno per determinare se in
un certo giorno è stato registrato o meno un impegno.
Con questa
richiesta iniziale, il programma può essere utilizzato più volte,
per inserire impegni in momenti diversi. Infatti la prima volta si richiede
l'inizializzazione, le volte successive invece non la si fa eseguire,
conservando i dati precedenti.
6-7 Se l'utente ha risposto con il carattere
S alla richiesta di inizializzazione viene richiesta una conferma; infatti se il
file esistesse già tutti i record verrebbero comunque impostati con il
segnale di record vuoto causando la perdita di tutti i dati.
da 8 a 13 Se
l'utente conferma la richiesta di inizializzazione del file viene scritto un
carattere particolare nel campo VUOTO di tutti i record del file (31 record
poiché si prevede un record per ogni giorno del mese).
11 Creazione
del record.
da 15 a 28 Inserimento degli impegni.
17 Si procede
nell'inserimento degli impegni soltanto se si inserisce un numero compreso tra 1
e 31; qualsiasi altro numero fa terminare il programma.
18 Quando si
registra un impegno in un giorno si modifica il carattere del campo VUOTO per
indicare che il record è utilizzato.
da 19 a 22 Inserimento
dell'orario e della descrizione dell'impegno. L'orario può essere
inserito nel formato voluto con al massimo 5 caratteri; per esempio 14.30 o 2:30
ecc.
23-24 Caricamento dei campi del record.
25 Registrazione del
record col numero di record individuato dal campo GIORNO.
29 Chiusura del
file AGENDA.
Programma in Basic
10 REM Creazione di una agenda
20 OPEN "AGENDA.DAT" FOR RANDOM AS #1
30 FIELD #1, 1 AS VUOTO$, 5 AS ORA$, 20 AS IMPEGNO$
40 PRINT "Inizializzazione dell'agenda? (S/N)"
50 INPUT RISPOSTA$
60 IF RISPOSTA$ = "S" THEN
70 PRINT "Tutti i dati saranno cancellati.
Continuare? (S/N)"
80 INPUT RISPOSTA$
90 IF RISPOSTA$ = "S" THEN
100 LSET VUOTO$ = CHR$(255)
110 FOR I% = 1 TO 31
120 PUT #1, I%
130 NEXT I%
140 END IF
150 END IF
160 PRINT "Inserire il giorno (Da 1 a 31)"
170 INPUT GIORNO%
180 DO WHILE GIORNO% > 0 AND GIORNO% 32
190 LSET VUOTO$ = CHR$(0)
200 PRINT "Inserire l'ora dell'impegno"
210 INPUT OR$
220 PRINT "Inserire la descrizione dell'impegno"
230 INPUT IMP$
240 LSET ORA$ = OR$
250 LSET IMPEGNO$ = IMP$
260 PUT #1, GIORNO%
270 PRINT "Inserire il giorno (Da 1 a 31)"
280 INPUT GIORNO%
290 LOOP
300 CLOSE #1
310 END
20 Apertura del file AGENDA in modo random; viene
associato al file il numero identificativo 1; se il file non esiste viene creato
con il nome AGENDA.DAT nella directory corrente del drive corrente; è
possibile specificare un path.
30 Definizione dle tracciato record; tutti i
campi sono alfanumerici: il primo di 1 carattere, il secondo di 5 caratteri, il
terzo di 20 caratteri; la lunghezza del record è quindi di 26
caratteri.
100 Inserimento del carattere nullo (quello corrispondente al
valore ASCII 255) nel campo VUOTO del record del file AGENDA. L'inserimento di
dati nel buffer per la gestione del record viene fatto con l'istruzione
LSET.
120 Istruzione per la registrazione del record nel file; l'istruzione
PUT è seguita dal numero identificativo del file e dal numero di record
da registrare; i dati da registrare non vanno indicati poiché viene
memorizzato il contenuto del buffer, preparato in precedenza con le istruzioni
LSET.
190 Inserimento del carattere indicante che il record è
utilizzato; si tratta ancora di un carattere nullo, ma questa volta
corrispondente al valore ASCII 0 (si poteva comunque usare qualsiasi altra
coppia di caratteri, ma i caratteri nulli danno una maggior garanzia di
correttezza poiché è meno probabile trovarli memorizzati per caso
sul disco nelle posizioni che si vanno a leggere).
240-250 Preparazione
degli altri dati (ora e descrizione dell'impegno) nel buffer per la gestione del
record, con l'istruzione LSET.
260 Registrazione dei dati al record numero
GIORNO.
300 Chiusura del file AGENDA.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inizializzazione? (S/N) ¦
¦ ? S ¦
¦ Tutti i dati saranno cancellati! Continuare? (S/N) ¦
¦ ? S ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 2 ¦
¦ Inserire l'ora dell'impegno ¦
¦ ? 17.00 ¦
¦ Inserire la descrizione dell'impegno ¦
¦ ? Partita a tennis ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 5 ¦
¦ Inserire l'ora dell'impegno ¦
¦ ? 15.00 ¦
¦ Inserire la descrizione dell'impegno ¦
¦ ? Appuntamento dal dentista ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 10 ¦
¦ Inserire l'ora dell'impegno ¦
¦ ? 10.30 ¦
¦ Inserire la descrizione dell'impegno ¦
¦ ? Lezione di piano ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 0 ¦
+----------------------------------------------------------------+
Commenti
Per
ogni giorno è possibile registrare un solo impegno; per registrare
più impegni per ogni giorno si può utilizzare un vettore nel
tracciato record con un elemento per ogni impegno (o meglio una coppia di
vettori, uno per gli orari e uno per le descrizioni).
Se si cerca di
richiamare più volte lo stesso giorno in questo programma, e ogni volta
si scrive un diverso impegno, rimane registrato soltanto l'ultimo, che ricopre
il precedente.
Il programma può essere molto migliorato se si
prevede prima dell'inserimento di un impegno, la lettura del record e il
controllo se contiene già dati validi, eventualmente mostrandoli a video
e chiedendo conferma della modifica; in questo modo lo stesso programma
permetterebbe inserimento, visualizzazione e variazione di
record.
L'esecuzione di questo programma non dà effetti a video, ma
guardando sul disco si vede che è stato creato il file AGENDA.DAT
utilizzato poi nel programma successivo per cercare l'impegno fissato per un
certo giorno.
PROMEMORIA
Per leggere dati da un file random
bisogna:
- Aprire il file in modo random con l'istruzione OPEN.
-
Definire il tracciato record per allocare lo spazio nel buffer con l'istruzione
FIELD.
- Leggere un record dal file, caricando i dati nel buffer, con
l'istruzione GET, indicando il numero del record da leggere.
- Utilizzare i
campi del buffer, riconvertendo in numeri i valori numerici.
- Chiudere il
file con l'istruzione CLOSE.
PROGRAMMA 16 - RICERCA
NELL'AGENDA
Questo programma permette di visualizzare l'impegno fissato in
un certo giorno a richiesta, cercandolo nel file AGENDA.DAT creato dal programma
precedente.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ AGENDA ¦ file random ¦ input ¦file dove ¦
¦ ¦ ¦ ¦registrare gli ¦
¦ ¦ ¦ ¦impegni giornalieri¦
¦ ¦ ¦ ¦di un mese ¦
¦ GIORNO ¦numero intero¦ input ¦giorno di cui si ¦
¦ ¦ ¦ ¦vogliono conoscere ¦
¦ ¦ ¦ ¦gli impegni ¦
¦ ORA ¦alfanumerico ¦ output ¦orario dell'impegno¦
¦ IMPEGNO ¦alfanumerico ¦ output ¦descrizione ¦
¦ ¦ ¦ ¦dell'impegno ¦
+----------------------------------------------------------------+
tracciato
record del file AGENDA
+----------------------------------------------------------------+
¦ vuoto ¦ ora ¦ impegno ¦
+----------------------------------------------------------------+
(I
nomi dei campi potrebbero essere anche diversi da quelli del programma
precedente; l'importante è che rimangano fissi l'ordine, il significato e
il tipo e la dimensione dei campi).
+----------------------------------------------------------------+
¦ nome del campo ¦ tipo ¦ significato ¦
+-------------------+-------------------+------------------------¦
¦ VUOTO ¦ 1 carattere ¦ segnale che indica ¦
¦ ¦ ¦ se il record è ¦
¦ ¦ ¦ utilizzato ¦
¦ ORA ¦ 5 caratteri ¦ orario dell'impegno ¦
¦ IMPEGNO ¦ 20 caratteri ¦ descrizione dello ¦
¦ ¦ ¦ impegno assunto ¦
+----------------------------------------------------------------+
Flow chart Programma 16Pseudocodifica (vedi
Figura)
1 inizio
2 apertura del file AGENDA in modo random
3 emissione richiesta giorno
4 lettura GIORNO
5 lettura del record GIORNO dal file AGENDA
6 se VUOTO = carattere indicante record vuoto allora
7 emissione " Nessun impegno"
8 altrimenti
9 emissione ORA IMPEGNO
10 fine se
11 chiusura del file AGENDA
12 fine
2 Apertura del file AGENDA in modo random come nel
programma precedente; in questo programma il file viene usato soltanto per la
lettura di record, ma sarebbe ammessa anche la scrittura.
3-4 Inserimento
del giorno di cui si vuole conoscere l'impegno.
5 Lettura del record con il
numero indicato da GIORNO dal file AGENDA.
6 Controllo del carattere
contenuto nel campo VUOTO per verificare se è stato registrato un
impegno.
9 Se l'esame del carattere VUOTO ha confermato che è stato
registrato un impegno, emissione degli altri campi del record: ORA e
IMPEGNO.
11 Chiusura del file AGENDA.
Programma in
Basic
10 REM Ricerca nell'agenda
20 OPEN "AGENDA.DAT" FOR RANDOM AS #1
30 FIELD #1, 1 AS VUOTO$, 5 AS ORA$, 20 AS IMPEGNO$
40 PRINT "Inserire il giorno (Da 1 a 31)"
50 INPUT GIORNO%
60 GET #1, GIORNO%
70 IF ASC(VUOTO$) = 255 THEN
80 PRINT "Nessun impegno"
90 ELSE
100 PRINT ORA$, IMPEGNO$
110 END IF
120 CLOSE #1
130 END
10 Apertura del file AGENDA in modo random,
associandogli il numero 1; il file viene cercato nella directory corrente ma
è possibile specificare il path.
30 Definizione del tracciato
record; i nomi dei campi possono essere diversi da quelli del programma
precedente ma devono rimanere uguali tipo e dimensione.
60 Lettura di un
record dal file AGENDA. L'istruzione GET è seguita dal numero
identificativo del file e dal numero del record che si vuole leggere; i dati
letti vengono caricati nel buffer per la gestione del record.
70 Viene
controllato se il valore ASCII corrispondente al carattere registrato nel campo
VUOTO è 255, cioè se si tratta del carattere indicante che il
record non è stato utilizzato.
100 Se sul record è stato
registrato un impegno si stampano ORA e IMPEGNO; vengono stampati direttamente i
campi del tracciato record.
120 Chiusura del file AGENDA.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 1 ¦
¦ Nessun impegno ¦
¦ ¦
¦ ¦
¦ Inserire il giorno (Da 1 a 31) ¦
¦ ? 2 ¦
¦ 17.00 Partita a tennis ¦
+----------------------------------------------------------------+
Commenti
Questo
programma permette di richiedere l'impegno di un solo giorno; per esaminare
più giorni bisogna rilanciare ogni volta il programma. Si può
prevedere un ciclo per la richiesta di più giorni o meglio ancora
integrare tutte le funzioni in un solo programma (inserimento, interrogazione,
variazione, magari gestite da menu) come già anticipato nel commento
relativo al programma precedente.