FILE TESTO

18
FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA PROGRAMMA CARICAMENTO DATI FILE DATI

description

PROGRAMMA. INPUT + DATI. INPUT. PROGRAMMA CARICAMENTO DATI. FILE DATI. PROGRAMMA. OUTPUT. FILE TESTO. OUTPUT. FILE TESTO. - PowerPoint PPT Presentation

Transcript of FILE TESTO

Page 1: FILE TESTO

FILE TESTO

OUTPUTINPUT

+DATI

PROGRAMMA

OUTPUTINPUT

PROGRAMMA

PROGRAMMACARICAMENTO

DATIFILE DATI

Page 2: FILE TESTO

FILE TESTO

- Contiene caratteri leggibili- E’ etichettato con un nome- Ha un indirizzo sull’unità di memoria di massa

I File testo si possono caricare e modificare con un Editor ad Es. quello del Turbo Pascal, il Word, Note Pad purchè vengano salvati come file testo (suffisso .txt), o con un appropriato programma Pascal.

EsempioLa vispa Teresaavea tra l’erbettaa volo sorpresagentil farfalletta

In ogni programma Pascal ogni file è identificato attraverso una variabile.

PROGRAM EcoFile(output, InFile);VAR

Infile : text;Carattere: char; {usato per estrarre i caratteri dal testo}

BEGIN…………..END.

UN FILE TESTO NON SI COMPILA PERCHE’ NON E’ UN PROGRAMMA !!!!

Page 3: FILE TESTO

APERTURA DI UN FILE

assign( ProvaF, ’C:\TP\ESEMPI\TESTO.TXT');

assign (IdentificatoreFile,NomeFile)

PROGRAM EcoFile(output, ProvaF);VAR

ProvaF : text;}

BEGINassign( ProvaF, ’C:\TP\ESEMPI\TESTO.TXT');…………..END.

assign ( )Nome fileIdentificatorefile

procedure

,

Page 4: FILE TESTO

Un file non può essere letto e scritto contemporaneamente.

La chiamata alla procedura reset può variare da dialetto a dialetto.

LETTURA DI UN FILE

La procedura reset prepara il file alla lettura.

reset (IdentificatoreFile)

reset ( )Identificatorefile

procedure

reset( ProvaF);

prepara file per la lettura

L a v i s p a T

VAX e standard Pascalreset(Testo)

TURBO PASCALassign(Infile,’TESTO.txt’)reset(Infile,’TESTO.txt’)

APPLE PASCALreset(Infile,’TESTO.txt’)

Page 5: FILE TESTO

FILE TESTO

Il file testo (.txt) è caratterizzato dall’avere un carattere speciale quando termina un rigo, detto: eoln (end-of-line); e da un carattere speciale che indica la fine del file detto: eof (end-of-file)

EsempioLa vispa Teresaavea tra l’erbettaa volo sorpresagentil farfalletta

Struttura del file testo

L a v i s p a T

a eoln a s e r e

a

v

t r .. .. ..

eof

eoln

eoln

eoln

ea

eoln

Page 6: FILE TESTO

L a v i s p a

L

Posizione e contenuto della finestradi lettura dopo il reset(ProvaF).

a Posizione e contenuto della finestradi lettura dopo readln(ProLett,Carattere);

write(Carattere);

L

a

eofeoln eolna

eoln

readln(Prolett,Carattere) a

eoln(Prolett) FALSE

eofeoln(Prolett) TRUE

Page 7: FILE TESTO

PROGRAM ProvaFiles(input,output,ProLett);{legge dal file TESTO i caratteri uno alla volta e li mostra a video}

VARProLett: text;Carattere: char;

BEGIN assign(ProLett,'C:\TP\ESEMPI\TESTO.TXT'); reset(ProLett); WHILE NOT eof(ProLett) DO BEGIN WHILE NOT eoln(ProLett) DO BEGIN read(ProLett,Carattere); write(Carattere) END; readln(ProLett); writeln; END; readlnEND.

Terminata la lettura di una rigabisogna andare a capo

Page 8: FILE TESTO

T eolnasere

Valori

Finestra input

eoln

Ch letto

Ch mostrato

input

False

T

?

True

eoln

a

a

False

a

s

s

False

s

e

e

False

e

r

r

False

r

e

e

False

e

T

T

Page 9: FILE TESTO

La chiamata alla procedura rewrite può variare da dialetto a dialetto e risulta operativa solo se il file aperto cui essa fa riferimento non contiene alcun carattere.

SCRITTURA DI UN FILE

La procedura rewrite prepara il file alla lettura.

Quando si scrive un file si presuppone sempre di comnciare dall’inizio del file. Se questo avesse già un contenuto questo verrebbe sovrascritto.

rewrite (IdentificatoreFile)

Identificatorefile

rewrite ( )

rewrite( ProvaF);

prepara file per la scrittura

Page 10: FILE TESTO

SCRITTURA DI UN FILE

Si può copiare un file in un altro anche leggendo un rigo alla volta

close (IdentificatoreFile)

close ( )Identificatorefile

procedure

close( Prodat);

CHIUSURA DI UN FILE

Dopo avere scritto un file è necessario chiuderlo.

La procedura close(InFile) chiude il file identificato dalla variabile InFile

Page 11: FILE TESTO

PROGRAM ProvaFiles(input,output,ProInput,ProOut);{esempio di lettura e scrittura di files}{legge dal file TESTO una stringa Stringa e la scrive su COPIA}

CONSTLungMax=80; {massima lunghezza permessa alle stringhe }

TYPE Stringa=STRING[LungMax]; {dipende dal dialetto}VARProInput,ProOut: text; {identificatori dei file di lettura e scrittura}Rigo: Stringa; {linea del testo letta e riscritta}

BEGIN assign(ProInput,'C:\TP\ESEMPI\TESTO.TXT'); assign(ProOut,'C:\TP\ESEMPI\COPIA.TXT'); reset(ProInput); {prepara file per la lettura} rewrite(ProOut); {prepara file per la scrittura} WHILE NOT eof(ProInput) DO {verifica che non sia finito il file} BEGIN readln(ProInput,Rigo); {leggi il rigo} writeln(ProOut,Rigo) {scrivi il rigo} END;close(ProInput); {chiudi il file di input}close(ProOut); {chiudi il file di output}writeln('File Duplicato ');readlnEND.

Page 12: FILE TESTO

In lettura i caratteri vengono letti uno alla volta (read) o a gruppi (readln) e la finestra di lettura si comporta come prima descritto.

In scrittura i caratteri letti vengono messi in un buffer del file rappresentato dal nome della variabile del file. Il buffer contiene una riga del testo, cioè dall’inizio fino a <eoln>. Con write leggiamo carattere per carattere e lo aggiungiamo nel buffer. Con writeln prima carichiamo il buffer con una riga di testo e poi scarichiamo il suo contenuto sul file di uscita aggiungendo automaticamente alla fine un <eol>.A questo punto il buffer si riempie di spazi vuoti ed è pronto a continuare la lettura.

Con un read o readln la finestra di lettura fa sempre un passo avanti.

Con un write o writeln si aggiunge sempre un carattere al buffer.

Page 13: FILE TESTO

ALGORITMI PER IL TRATTAMENTO DI FILE TESTO

write mode v i s p a bufferinvio

Variabile NomeFileOutFile

eolnL a v i s p aeoln

read mode

L a v i s p a

iFinestra di lettura

Variabile NomeFileInFile

v

alla elaborazione

Page 14: FILE TESTO

PROGRAM MostraFile(VispaTeresa, output);{mostra il contenuto di un file su monitor}VARVispaTeresa: text;

BEGINassign(VispaTeresa,’C:\TP\ESEMPI\TESTO.txt’)reset(VispaTeresa);CopiaFile(VispaTeresa,output);close(VispaTeresa);END.

PROCEDURE CopiaFile(VAR InFile,OutFile:text);{i file InFile e OutFile sono già stati preparati per essere

letti e scritti}VAR Carattere: char; {carattere da leggere da InFile}BEGIN WHILE NOT eof(InFile) DO {verifica che non sia finito il file} BEGIN

WHILE NOT eoln(InFile) DO BEGIN read(InFile,Carattere); {leggi il carattere} write(OutFile,Carattere) {scrivi il carattere} END; readln(InFile); writeln(OutFile) ENDEND;

Page 15: FILE TESTO

CREAZIONE DI UN FILE TESTO DA TASTIERAPROGRAM Digitato(input, output, FileDigitato);{crea un file da tastiera e poi lo mostra }VARFileDigitato: text;Risposta : char; {per rispondere al quesito}PROCEDURE Istruzioni;BEGINwriteln(‘Alla fine della digitazione premere CONTROL Z per chiudere il file)END;PROCEDURE CopiaFile(VAR InFile,OutFile: text);BEGIN ********************* END;

{************* MAIN ********************}BEGIN assign(FileDigitato,’C:/TP/ESEMPI/TESDIG.TXT); rewrite(FileDigitato); CopiaFile(input, FileDigitato); close(FileDigitato); reset(input); {necessario per alcuni dialetti} write(‘Copia eseguita. Vuoi rivedere il testo ? S/N’); readln(Risposta); IF Risposta IN[‘S’,’s’] THEN BEGIN

writeln;reset(FileDigitato);CopiaFile(FileDigitato,output)

END;END.

Page 16: FILE TESTO

COPIA DI DUE FILE IN UNO

PROGRAM CopiaDueFile(output;Teresa, Giacomo, TerGiac);VAR

Teresa, Giacomo, TerGiac: text;PROCEDURE CopiaFile(VAR InFile, OutFile: text);BEGIN*******************END;BEGIN

assign(Teresa,’C/TP/ESEMPI/TESTO1.txt’);assign(Giacomo,’C/TP/ESEMPI/TESTO2.txt’);assign(TerGiac,’C/TP/ESEMPI/TESTO3.txt’);rewrite(TerGiac);reset(Teresa);CopiaFile(Teresa,TerGiac);writeln(TerGiac);reset(Giacomo);CopiaFile(Giacomo,TerGiac); writeln(‘ FINE’);close(TerGiac)

END.

LETTURA DEL NOME DEL FILE DURANTE L’ELABORAZIONE

PROCEDURE ChiamaFile(VAR NomeFile: StringType; VAR UnFile: text);BEGIN

write(‘ Dammi il nome del file da elaborare: ‘);readln(NomeFile);assign(UnFile, NomeFile)

END;

Page 17: FILE TESTO

USO DELLA FUNZIONE eoln

Il valore di default della funzione eoln è il file input, cioè se nonè dichiarato il nome del file, allora la funzione eoln sarà vera quandobattiamo il tasto invio. In questo caso sia per eoln che per read o readln non è necessario mettere il parametro relativo al file.

Lettura di un rigo di un file carattere per carattere

WHILE NOT eoln(UnFile) DOread(UnFile, Carattere)elabora carattere

Alla fine del loop tutti i caratteri del rigo sono stati letti e il carattere eolnè il nuovo candidato ad essere letto. Questo provoca la lettura di uno spazio che in realtà non esiste. Per evitare questo si pone readln(UnFile)

readln(UnFile) {azzera la finestra di lettura}

Senza questa istruzione se c’è un altroread verrà letto un blank.

Page 18: FILE TESTO

ESEMPIO

Contare il numero di caratteri digitati e il numero degli spazi.ContaSpazi:=0;ContaCaratteri:=0;WHILE NOT eoln DO

BEGIN read(Carattere); ContaCaratteri:=ContaCaratteri+1;

IF Carattere = ‘ ‘ THEN ContaSpazi:=ContaSpazi+1;

END;readln;write(‘Il numero di caratteri totali digitati e’’’,ContaCaratteri,

‘di cui ’,ContaSpazi,’ spazi.’);

Notare che abbiamo usato il file didefault input.

Leggere caratteri fin quando non si incontra eoln

Carattere ‘ ‘;IF NOT eoln(UnFile) THEN

read(UnFile, Carattere);ELSE Carattere ‘ ‘

Trovare il primo carattere diverso da blank

Carattere ‘ ‘;WHILE (Carattere =‘ ‘) AND NOT eoln(UnFile) DO

read(UnFile, Carattere);

readln;