FILE DI TESTO


Un file di testo è un tipo strutturato definito da una sequenza di stringhe. Nel pascal, un file di testo è realizzato mediante il tipo TEXT.


Il tipo TEXT è la struttura di dati più adatta per elaborare in un programma un documento di testo non formattato, formato da una sequenza di righe (le stringhe), separate le une dalle altre dai simboli speciali di FINE LINEA(EOLN: end of line). Ogni riga(o linea) è formata, a sua volta, da una lista di caratteri alfanumerici(cifre numeriche, lettere e simboli speciali) codificati in ASCII. La fine del documento è contrassegnata dal simbolo speciale di file testo(ETX: end of text, codice ASCII 3 decimale).
Nel file fisico, il simbolo EOLN è formato dal carattere speciale di ritorno a capo o "ritorno carrello"(CR: carrige return, codice ASCII 13), seguito da un avanzamento linea nuova variabile filetesto del tipo TEXT, che può essere utilizzata per elaborare un documento ASCII non formattato.

Esempio di dichiarazione di una variabile di tipo TEXT:
 VAR
  filetesto: TEXT;


OPERAZIONI SUI FILE DI TESTO.

Molte delle operazioni sui file TEXT sono comuni ai flussi del tipo FILE OF TipoRecord. In Tabella sono richiamate le principali operazioni sui file di tipo TEXT, nell' ordine in cui devono essere richiamate.

CREAZIONE CONNESSIONE


-ASSIGN(filetesto, percorsofilefisico): crea una connessione tra il file di testo e un filefisico (individuato dal suo percorso, opzionale più il nome del file).                        

APERTURA


-REWRITE(filetesto): crea e apre un nuovo file testo, a sola scrittura, posizionandosi nella prima linea(BOF).                            
-RESET(filetesto): apre un file testo già esistente, in lettura/scrittura, partendo dalla prima riga (BOF).                            
-APPEND(filetesto):apre un file di testo già esistente, posizionandosi alla fine del file (EOF), per aggiungere nuove righe.            

SCRITTURA


-WRITE(filetesto, elencoVar): Scrive il contenuto di un elenco di variabili separate da una virgola(Ad esempio, var1, var2, var3)nella riga corrente del file di testo.              
-WRITELN(filetesto, elencoVar): scrive il contenuto di un elenco di variabili nella linea corrente e inserisce un salto linea EOLN

LETTURA


-READ(fileTesto,elencoVar): legge un elenco di variabili separate da una virgola(ad esempio var1, var2, var3) dalla riga corrente sul file di testo.                                    
-READLN(filetesto,elencoVar):legge un elenco di variabili della riga corrente sul file testo, finchè non si incontrano i simboli di fine linea EOLN.                              

CHIUSURA


-CLOSE(filetesto): chiude il flusso e quindi la sua connessione con il file fisico


Le variabili scritte su un file di testo possono anche essere numeri(interi o reali), che nella scrittura saranno memorizzati in formato testuale. Nell'elaborazione dei file di testo, oltre alla funzione EOF(file testo), può anche essere utile quella di EOLN(filetesto), che restituisce il valore true quando nelle operazioni di lettura si incontrano i simboli di fine linea.

ESEMPIO1
Il seguente programma permette di realizzare un semplice  editor di testo, scrivendo su un file di tipo text una serie di righe digitate dall'utente.

PROGRAM TextEditor;
VAR
 filetesto: TEXT;{variabile che realizza il file di testo}
 PercorsoFileFisico, riga: String;{variabili di input}
 Linea: Integer;{varaibile ausiliaria}
 fineDiScrivere: Boolean;{varaibile ausiliaria}
 scelta: Char;{varaibile ausiliaria}
BEGIN
 Write('Percorso e nome del file = ');
 Readln(percorsoFilefisico);
 Assign(filetesto, percorsofilefisico);{connessione filetesto->filefisico}
 Writeln('MENU: 1.Nuovo file di testo 2.Apri file di testo esistente');
 Write('scelta (N o A) = '); readln(scelta);
 CASE scelta OF
  'N', 'n': Rewrite(filetesto);{creazione nuovo file di testo posizone BOF}
  'A', 'a': Append(filetesto){apertura alla fine del file di testo EOFETX};
 END;
 linea:=0;{inizializzazione variabili}
 finediscrivere:= false;
 Writeln('per terminare digita solo INVIO');
 REPEAT
  linea:= linea+1;{nuova linea}
  Write('Linea',linea,': '); readln(riga);
  IF riga = '' THEN
    finediscrivere := true{utente ha digitato solo un invio, stringa nulla}
  ELSE
    Writeln(filetesto, riga);{aggiungo la riga al file di testo}
  UNTIL finediscrivere;{fine ciclo quando finediscrivere= true}
 Close(filetesto);
END.


ESEMPIO2

Calcolare la media di tutti i numeri memorizzati su righe diverse di un file di testo (i numeri possono rappresentare, ad esempio, misure di temperature o i voti degli studenti di una classe).


PROGRAM mediaDaFile;
VAR
 filetesto: TEXT;{variabile che realizza il file di testo}
 percorsoFileFisico: String;{variabile di input}
 n: integer;{variabile intermedia}
 numero: Real;{variabile intermedia}
 media: Real;{variabile di output}
BEGIN
 Write('Percorso e nome del file di testo = ');
 Readln(percorsofilefisico);
 Assign(filetesto, percorsofilefisico);{connessione filetesto->filefisico}
 reset(filetesto);{apertura file di testo esistente nella prima riga}
 media:= 0;{variabile accumulatore con la somma e poi la media dei numeri}
 n:= 0;{numero di valori letti dal file}
 WHILE NOT EOF(filetesto) DO{finchè non si raggiunge la fine del file }
 BEGIN
  n:= n+1;{aggiornamento numero dei valori letti sul file}
  Readln(filetesto, numero);{lettura riga con numero}
  media:= media + numero;
 END; 
  IF N>0 THEN{se il file contiene i dati}
   BEGIN
    media:= media/N;
    Writeln('La media dei ',n,' numeri vale ', media:5:2);
   END
  ELSE
   Writeln('Non ci sono dati sul file!');
 Close(filetesto);{chiusura e salvataggio del file testo}
END.


      
Spero di esservi stato utile.