Scrivere e leggere un file in Basic, Open Close Print# Input#, #6

Benvenuti alla sesta puntata del corso per Programmare in Basic. Oggi vediamo come scrivere e leggere un file in Basic, con le istruzioni Open, Close, Print# e Input#.

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Imparare a programmare in Basic, su quali computer?

Anche il programma di esempio che analizziamo oggi può essere eseguito sui vari Commodore a 8 bit, come il Commodore 64, il C16, il Vic20, il Commodore 128 e il PET. Lo potete eseguire sugli emulatori, come il VICE e il CCS64.

Se utilizzate l’emulatore, ricordate di collegare un disco virtuale D64 al drive 8, altrimenti il programma di esempio non potrà scrivere e leggere il file.

Il programma di esempio, inoltre, è compatibile con il GwBasic del vecchio DOS per PC IBM, che potete eseguire nell’emulatore DOSBox. Per chi non lo conoscesse, DOSBox consente di far funzionare i vecchi programmi DOS, anche su Windows 10. Inoltre potete eseguirlo con il QuickBasic QB64 e il PC-Basic, che consente di emulare il GwBasic su Windows 10.

Scrivere e leggere un file in Basic: le varianti del listato del programma di esempio

Ecco il listato del programma per scrivere e leggere un file ad accesso sequenziale in Basic. In fondo a questa pagina, è possibile scaricarlo. L’utilizzo delle istruzioni Open, Close, Print# e Input# è leggermente diverso tra il Basic del Commodore e quello dei PC IBM.

Listato per Basic del Commodore:

10 REM IL MIO SESTO PROGRAMMA IN BASIC
20 REM SCRITTURA E LETTURA DI UN FILE
30 REM (C) 2021, WWW.VALOROSO.IT

100 REM LEGGO O SCRIVO?
110 PRINT: PRINT "DIGITA:"
120 PRINT " 1 PER SCRIVERE"
130 PRINT " 2 PER LEGGERE"
140 INPUT C$
150 IF C$ = "1" THEN GOTO 300
160 IF C$ = "2" THEN GOTO 500
170 GOTO 140

300 REM SCRITTURA FILE
310 PRINT: INPUT "COSA SCRIVO";A$
320 OPEN 1,8,2,"@O:PROVA,SEQ,W"
330 PRINT#1, A$
340 CLOSE 1
350 GOTO 100

500 REM LETTURA FILE
510 PRINT
520 OPEN 1,8,2,"PROVA,SEQ"
530 INPUT#1, B$
540 PRINT B$
550 CLOSE 1
560 GOTO 100

Listato per QuickBasic QB64, GwBasic e PC-BASIC:

10 REM IL MIO SESTO PROGRAMMA IN BASIC
20 REM SCRITTURA E LETTURA DI UN FILE
30 REM (C) 2021, WWW.VALOROSO.IT

100 REM LEGGO O SCRIVO?
110 PRINT: PRINT "DIGITA:"
120 PRINT " 1 PER SCRIVERE"
130 PRINT " 2 PER LEGGERE"
140 INPUT C$
150 IF C$ = "1" THEN GOTO 300
160 IF C$ = "2" THEN GOTO 500
170 GOTO 140

300 REM SCRITTURA FILE
310 PRINT: INPUT "COSA SCRIVO";A$
320 OPEN "PROVA.TXT" FOR OUTPUT AS #1
330 PRINT #1, A$
340 CLOSE #1
350 GOTO 100

500 REM LETTURA FILE
510 PRINT
520 OPEN "PROVA.TXT" FOR INPUT AS #1
530 INPUT #1, B$
540 PRINT B$
550 CLOSE #1
560 GOTO 100

Analisi del programma di esempio per scrivere e leggere un file in Basic

Le prime tre righe di programma, la 10, la 20 e la 30, contengono le istruzioni REM, per scrivere i commenti, che abbiamo già visto nella prima puntata del videocorso sul linguaggio Basic.

Scrivere e leggere un file in Basic, Commodore, QB64, PC-BASIC, corso programmazione Basic REM

Le righe dalla 100 alla 170 chiedono all’utente quale operazione voglia svolgere: la scrittura o la lettura di del file. Ovviamente, prima di leggerlo, il file va creato, per cui l’utente dovrà digitare 1, inizialmente.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

La risposta dell’utente viene inserita nella variabile C$. Se C$ vale “1”, inteso non come numero, ma come stringa, allora l’esecuzione del programma si sposta alla riga 300, dove il computer scrive il file. Invece, se C$ vale “2”, l’esecuzione continua alla riga 500, dove il computer legge il file che abbiamo creato in precedenza.

Abbiamo visto l’istruzione condizionale IF… THEN nella seconda puntata del videocorso sul Basic.

Scrivere e leggere un file in Basic, Commodore, QB64, PC-BASIC, corso programmazione Basic INPUT

Bene, arriviamo alla riga 300, dove il computer crea un file. L’utente deve digitare la stringa da scrivere sul file. Può essere una frase o un nome, ad esempio, purché non contenga virgole. Tramite l’istruzione INPUT, presente alla riga 310, la stringa da scrivere su file viene memorizzata nella variabile A$.

Scrivere e leggere un file in Basic, Commodore, QB64, PC-BASIC, OPEN PRINT# CLOSE numero file address

L’istruzione OPEN per aprire un file in Basic

L’istruzione OPEN, presente alla riga 320, serve per aprire un file logico: un canale di comunicazione con la periferica, in questo caso il drive Commodore 1541. La sintassi è diversa tra il Basic del Commodore e quello per i PC.

Analizziamola nel dettaglio.

Scrivere un file in Basic, Commodore 64 Vic20 16 128 PET, OPEN file sequenziale in scrittura SEQ, C64, C128, C16
320 OPEN 1,8,2,"@O:PROVA,SEQ,W"

Nel Commodore, il primo numero dopo OPEN rappresenta il numero del file logico. E’ un numero arbitrario che può variare tra 1 e 255. Il secondo numero, 8, rappresenta l’indirizzo della periferica con cui si vuole comunicare. Nel mio caso, l’emulatore SD2IEC del drive Commodore 1541 si trova all’indirizzo 8.

Il terzo numero, in caso del drive, rappresenta il canale per i dati. Per scrivere e leggere un file, si può usare un numero arbitrario compreso tra 2 e 14. Per inviare comandi al drive, ad esempio per formattare il dischetto o cancellare un file, questo numero deve essere 15.

Tra le virgolette, indichiamo il nome del file, preceduto da @O: per abilitare la sovrascrittura del file. Senza @O:, il file verrebbe creato solo la prima volta e non si cancellerebbe per scrivere una nuova stringa. SEQ rappresenta il tipo di file da creare: un normale file ad accesso sequenziale. Il computer scrive e legge i dati in sequenza, uno dopo l’altro. W serve per abilitare la modalità di scrittura del file.

Relativamente al Basic dei PC, ad esempio il GwBasic, il PC-BASIC o il QuickBasic QB64, la sintassi è differente.

Scrivere e leggere un file in Basic, QB64, QuickBasic, GwBasic, Turbo Basic, PC-BASIC, OPEN FOR OUTPUT AS aprire un file sequenziale
320 OPEN "PROVA.TXT" FOR OUTPUT AS #1

Innanzitutto il nome del file si dichiara appena dopo OPEN: nel programma di esempio, il file si chiama “PROVA.TXT”. Poi, la modalità di lettura o scrittura si dichiara fuori dalle virgolette. In questo caso, FOR OUTPUT indica che il file deve essere scritto e non letto. Il numero di file logico è indicato dopo AS #.

Il Basic dei PC IBM è anche in grado di concatenare i dati in un file, aggiungendo ulteriori dati, al posto di sovrascrivere i dati scritti in precedenza. Per farlo, si utilizza FOR APPEND al posto di FOR OUTPUT. Questo FOR non va confuso con il ciclo FOR… NEXT. Esistono anche altre modalità di accesso al file, non solo quella ad accesso sequenziale, ma questo non è argomento del presente video.

Dopo l’istruzione OPEN, se non ci sono stati errori (ad esempio il drive spento o il disco pieno), ci troviamo con il file logico 1 aperto. Il drive ha creato un file sequenziale chiamato “PROVA”, nel quale possiamo scrivere dei dati.

Infatti, alla riga 330, PRINT#1 scrive la stringa A$ (contenente i dati da scrivere, che il computer ha chiesto prima), sul file logico 1, che corrisponde al file “PROVA” sul drive.

Scrivere e leggere un file in Basic, Commodore 64 128 Vic20 16 PET, scrivere una stringa su un file di testo PRINT#

Anche qui, c’è una piccola differenza tra i Commodore e i PC: nei PC, tra PRINT e il cancelletto, ci vuole uno spazio.

Scrivere e leggere un file in Basic, QB64 PC-BASIC QuickBasic GwBasic, scrivere una stringa su un file di testo PRINT#

E’ possibile scrivere più righe di dati su uno stesso file, inserendo altre istruzioni PRINT#1 dopo la riga 330.

Terminata la scrittura della stringa, il file logico 1 viene chiuso con l’istruzione CLOSE, presente alla riga 340. Nei PC IBM si utilizza il cancelletto, che nel Commodore non ci vuole. E’ importante chiudere il file dopo averlo aperto.

Con la riga 350 torniamo al menu principale, dove, ad esempio, possiamo scegliere di leggere il file appena creato.

Approfondendo il comando OPEN, non è possibile aprire una seconda volta lo stesso numero di file logico, senza averlo chiuso in precedenza.

Lettura di un file di testo ad accesso sequenziale in Basic

Proseguiamo il corso su come scrivere e leggere un file in Basic. Dalla riga 500 si apre e si legge il file che abbiamo appena scritto. Ovviamente, bisogna creare il file prima di leggerlo, altrimenti il programma non restituisce alcun dato, oppure restituisce errori.

Scrivere e leggere un file in Basic, Commodore, QB64, PC-BASIC, OPEN INPUT CLOSE numero file address

Alla riga 520 troviamo ancora l’istruzione OPEN.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

520 OPEN 1,8,2,"PROVA,SEQ"

Apriamo sempre il file logico 1 sul drive 8, canale 2. Il file da aprire è chiamato “PROVA”, ed è lo stesso file sequenziale che abbiamo scritto in precedenza. L’assenza della “W”, preceduta dalla virgola, rappresenta la modalità di lettura.

Leggere un file in Basic, Commodore 64 Vic20 16 128 PET, OPEN file sequenziale in scrittura SEQ

Anche qui, nel Basic dei PC IBM, ad esempio il GwBasic, il PC-BASIC o il QuickBasic QB64, la sintassi di OPEN è differente.

520 OPEN "PROVA.TXT" FOR INPUT AS #1

Rispetto a prima, utilizziamo FOR INPUT in modo da dichiarare la modalità di lettura del file.

Leggere un file in Basic, QB64, QuickBasic, GwBasic, Turbo Basic, PC-BASIC, OPEN FOR INPUT AS AS# aprire un file sequenziale

Dopo l’istruzione OPEN, se non ci sono stati errori, ci troviamo con il file logico 1 aperto, che corrisponde alla lettura del file “PROVA” presente su disco.

Alla riga 530, con INPUT#1, il computer legge il contenuto della prima riga di dati del file sequenziale. Questi dati, vengono memorizzati nella variabile B$.

Nel Basic dei PC, tra INPUT e #1 ci vuole lo spazio.

Leggere un file in Basic, Commodore 64 128 Vic20 16 PET, leggere una stringa su un file di testo INPUT#

Con la riga 540, scriviamo a monitor i dati presenti nella variabile B$, quindi il contenuto della prima riga del file.

E’ possibile leggere più righe di dati dal file (che non devono contenere virgole), aggiungendo più istruzioni INPUT#1 dopo la riga 530. Ovviamente il file deve contenere più righe di dati, altrimenti il computer restituisce un errore.

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Alla riga 550 chiudiamo il file aperto, mentre alla riga 560 torniamo al menu principale.

Prova ed esecuzione del programma di esempio

Dopo aver caricato e avviato il programma di esempio, disponibile in fondo a questa pagina, il primo passo è scrivere un file. Digitiamo 1, seguito da RETURN.

Se utilizzate l’emulatore, ricordate di collegare un disco virtuale D64 al drive 8, altrimenti il programma di esempio non potrà scrivere e leggere il file. Se utilizzate un vero Commodore, ricordatevi di collegare il drive all’indirizzo 8.

Digitiamo la stringa che vogliamo scrivere su file, ad esempio il vostro nome.

Quando il programma torna al menu, possiamo andare a leggere il file: digitiamo 2 seguito da RETURN.

Il computer legge il file “PROVA” che abbiamo creato, che contiene la stringa che abbiamo digitato prima.

Scrivere e leggere un file in Basic, Commodore, QB64, PC-BASIC, GwBasic, corso programmazione Basic programma di esempio

Nei computer Commodore, possiamo effettivamente verificare che il file sia stato scritto su disco, con i comandi:

LOAD "$",8
LIST

Nei PC IBM possiamo utilizzare il comando DIR (nel DOS) oppure utilizzare l’esplora file di Windows.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Scrivere e leggere un file in Basic, QB64 PC-BASIC QuickBasic GwBasic, file di testo TXT
Scrivere e leggere un file in Basic, QB64 PC-BASIC QuickBasic GwBasic, file di testo TXT NOTEPAD blocco note

Listato del programma per scrivere e leggere un file in Basic

Ed ecco il listato del programma della sesta puntata del videocorso su come programmare in Basic, con il Commodore e con il PC IBM.

  • CORSO-BASIC-6.ZIP, cartella compressa ZIP da scompattare. Include il programma in formato PRG, caricabile ed avviabile dal Commodore 64, un disco virtuale D64 con all’interno i programmi caricabili dal C16, Vic20, C64 e C128, nonché emulatori (CCS64, VICE o altri). Contiene anche un file D64 vuoto, per gli emulatori. Include anche il programma in formato BAS per il PC-Basic, il QuickBasic QB64 e il GwBasic per DOSBox e MSDOS.

Gli argomenti del corso sono ancora tanti!

Credits: nel videocorso, la SID music è Delta di Rob Hubbard.

Per essere avvisati quando usciranno altri tutorial, esperimenti e recensioni relativi ai retro computer ed le successive puntate del corso sul BASIC, vi suggerisco di iscrivervi al canale YouTube e attivare la campanella delle notifiche!

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Ti piace questa pagina? Condividila:

Pubblicato in Retro Computer, Retro Tecnologia ed Elettronica Vintage, Tutti gli articoli.

Lascia un commento

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