Turbo Pascal MSX – Lezione 7

da | Feb 5, 2024 | Programmazione, Turbo Pascal | 0 commenti

I FILES (parte 1)

Turbo Pascal fornisce un completo set di istruzione per la gestione dei file. Il tipo FILE è rappresentato da una sequenza di oggetti dello stesso tipo, la dimensione di  un file non è determinata dal tipo, ma viene fornito un puntatore che si sposta lungo il file, per esempio quando viene aggiunto un dato, il puntatore si sposta al successivo, ma può anche essere gestito dal programma in modo da recuperare le informazioni cercate.

Vediamo un esempio di definizione di FILE

Type

Names = string[30];

var

Numeri: file of integer;

nomi: file of names;

Nell’esempio abbiamo definito due variabili, la prima numeri, che è un file di tipo integer  e nomi che abbiamo definito come file di stringhe. Una volta che abbiamo definito uno o più variabili di tipo file, vediamo come operare. Turbo pascal mette a disposizione un certo numero di procedure e funzioni con le quali manipolare il file:

Considerando come file il file numeri che abbiamo dichiarato nell’esempio, le procedure di assegnazione, lettura, scrittura ecc. sono le seguenti:

Assign (Numeri, NomeDelFile)

            NomeDelFile è una variabile di tipo stringa che indica il nome del file, secondo gli standard ammessi dal sistema operativo. Il nome viene associato alla variabile di tipo file e tutte le operazioni di lettura e scrittura eseguite sulla variabile

modificheranno il file NomeDelFile. Per esempio

assign(Numeri,’Prod.txt’);

            Assegna univocamente la variabile Numeri al file ‘Prod.txt’ sul disco.

Rewrite(Numeri, dim);

              Se il file assegnato con Assign esiste, viene reinizializzato,  il contenuto perso e il puntatore del file viene posto a zero.

Reset(Numeri,dim);

            Se il file aperto non esiste viene generato un errore, altrimenti il puntatore viene posto all’inizio del file, ma il contenuto viene mantenuto.

Le procedure di Rewrite e Reset dispongono di un secondo parametro facoltativo (dim) che può essere utilizzato con file non tipizzati e Consente di specificare il numero di byte per blocco. Ad esempio, è possibile specificare una dimensione del blocco di 1 byte ed eseguire un BlockRead di 128 blocchi e ottenere lo stesso risultato della lettura di un blocco di 128 byte. Il vantaggio di questo secondo parametro è che il programma non deve più per gestire il troncamento o l’eccedenza di un file perché la lunghezza del file  non è divisibile per 128.

Read(Numeri,dato);

            l’informazione letta dal file, viene assegnata a una o più variabili dato (separate da virgola), che devono essere del tipo indicato nella dichiarazione, una volta letto l’informazione , il puntatore viene spostato al valore successivo.  

Write(Numeri,dato);

              l’informazione contenuta nella, o nelle variabili dato (separate da virgola), viene scritta nel file e il puntatore viene spostato alla posizione successiva

Seek(Numeri,n);

              Seek sposta il puntatore del file sull’ennesimo componente del file. n è un’espressione di tipo intero. La posizione del primo elemento di un  file è 0. È possibile utilizzare un valore per  n che sia maggiore della lunghezza del file per scrivere oltre l’ultimo elemento di un file. La dichiarazione seek(Numeri, DimensioneFile(Numeri); quindi posiziona il puntatore al file alla fine del file (FileSize restituisce il numero di componenti nel file e man mano che i componenti sono numerati da zero, il numero restituito è maggiore di uno

Flush(Numeri);

Flush svuota il buffer interno del file Numeri e quindi assicura che il buffer del settore venga effettivamente scritto sul disco in caso di operazioni di scrittura dall’ultimo aggiornamento del disco. Flush assicura anche che L’operazione di lettura successiva eseguirà effettivamente una lettura fisica dal file su disco. Flush non deve mai essere utilizzato su un file chiuso.

Close(Numeri);

              Chiude il file Numeri e aggiorna il contenuto del disco. E’ sempre opportuno chiudere un file dopo l’utilizzo in modo da non tenere occupati troppi puntatori

Erase(Numeri);

rename(Numeri,NuovoNomeFile);

            Rinomina il file Numeri, con il nome contenuto nella variabile di tipo string, NuovoNomeFile. Quindi tutte le operazioni verranno effettuate sul nuovo file. Rename va utilizzato su un file aperto. E’ compito del programmatore assicurarsi che NovoNomeFile non esista già sul disco

Vengono poi fornite una serie di funzioni standard che operano sui file:

Eof(Numeri);

              Funzione booleana che restituisce True se il puntatore al file è posizionato in corrispondenza della fine del file su disco, ovvero oltre l’ultimo componente del file. altrimenti EOF restituisce False.

FilePos(Numeri);

              restituisce un valore intero che indica la posizione del puntatore, se all’inizio del file, restituisce 0

File Size(Numeri);

              restituisce un valore intero che indica la dimensione del file espressa come numero dei dati di cui è composto un file.

Una menzione particolare è necessaria per i file di testo che si dichiarano con il tipo Text.  I file di testo hanno la particolarità di utilizzare le stesse istruzioni che si utilizzano per scrivere del testo sullo schermo, con la differenza che va indicato il file di destinazione. Ad esempio per stampare su schermo una costante stringa utilizziamo l’istruzione Write  0 Writeln  se vogliamo un ritorno a capo dopo la stampa, in questo modo:

Write(‘Hello World!’);

oppure

Writeln(‘Hello World!’);

per scrivere in un file di testo le stesse informazioni, è sufficiente dichiarare un file di testo e inizializzarlo, nello stesso modo che abbiamo visto prima:

Var FileDiTesto testo : Text {dichiariamo un file di tipo text}

Assign (FileDiTesto,’testo.txt’); {assegniamo al file il nome su disco ‘testo.txt’}

A questo punto  per scrivere nel file non faremo altro che scrivere utilizzando le parole chiave Write o Writeln passando come parametro, l’identificatore del file prima dei dati da scrivere:

Write(FileDiTesto,‘Hello World!’);

oppure

Writeln(FileDiTesto,‘Hello World!’);

Il file che otterremo sarà organizzato logicamente in righe di testo terminate con i caratteri CR LF (asci 13 e ascii 10) ovvero ritorno a capo e avanzamento di riga.

Naturalmente un file di questo tipo può essere aperto e modificato come un qualsiasi altro file di testo.

0 commenti

Invia un commento

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

Turbo Pascal MSX – Lezione 4

MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 4) Lezione 4 Set di istruzioni Le parole riservate sono parte integrante di Turbo Pascal. Non possono essere ridefinite, né usate come identificatori o nomi di variabili. Il Turbo Pascal è sostanzialmente il...

Turbo Pascal MSX – lezione 3

MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 3) Capitolo 3 Il tipo di dati definisce l’insieme di valori che una variabile può assumere. I tipi di dati più complessi che possono essere definiti dal programmatore, derivano tutti dai tipi standard. I tipi...

Turbo Pascal MSX – lezione 2

MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 2) Capitolo 2 Introduzione al linguaggio Turbo Pascal Vedremo ora come è strutturato un programma in Turbo Pascal. Non è necessario comprendere tutto in questo momento, stiamo solo vedendo la struttura tipica...

it_ITIT_IT