INFORMATICA - BASIC: IL TRATTAMENTO DEI DATI

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 12


Pseudocodifica (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 13


Pseudocodifica (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 14


Pseudocodifica (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 16


Pseudocodifica (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.
Chiudi

Outlet Offerte Sconti Promozioni Risparmiare sugli Acquisti di prodotti e Servizi in Internet

Gigacenter Store-Vente privee-Show room prive-La ruota della fortuna-Outlet Più Style-Offerte Outlet Store-Sconti Outlet Offerte-Spartoo Shoes-Private Outlet-Saldi Privati-Sold Outlet-Offerte del GiornoBuoni sconto-Saldi Sconti-Offerte Viaggio-Acquisti + Guadagni

 

eXTReMe Tracker

Shiny Stat

free counters