Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoSevero Valle Modificato 10 anni fa
1
FILE TESTO INPUT PROGRAMMA + DATI OUTPUT FILE DATI PROGRAMMA OUTPUT
CARICAMENTO DATI FILE DATI OUTPUT INPUT PROGRAMMA
2
UN FILE TESTO NON SI COMPILA PERCHE’ NON E’ UN PROGRAMMA !!!!
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. - Contiene caratteri leggibili - E’ etichettato con un nome - Ha un indirizzo sull’unità di memoria di massa Esempio La vispa Teresa avea tra l’erbetta a volo sorpresa gentil 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 !!!!
3
APERTURA DI UN FILE procedure ( , )
assign ( Identificatore file , Nome file ) assign (IdentificatoreFile,NomeFile) assign( ProvaF, ’C:\TP\ESEMPI\TESTO.TXT'); PROGRAM EcoFile(output, ProvaF); VAR ProvaF : text; } BEGIN assign( ProvaF, ’C:\TP\ESEMPI\TESTO.TXT'); ………….. END.
4
reset (IdentificatoreFile)
LETTURA DI UN FILE Un file non può essere letto e scritto contemporaneamente. La procedura reset prepara il file alla lettura. La chiamata alla procedura reset può variare da dialetto a dialetto. reset ( ) Identificatore file procedure VAX e standard Pascal reset(Testo) TURBO PASCAL assign(Infile,’TESTO.txt’) reset(Infile,’TESTO.txt’) APPLE PASCAL reset (IdentificatoreFile) prepara file per la lettura reset( ProvaF); L a v i s p T
5
L a v i s p T eoln e r t .. eof FILE TESTO Esempio La vispa Teresa
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) Esempio La vispa Teresa avea tra l’erbetta a volo sorpresa gentil farfalletta Struttura del file testo L a v i s p T eoln e r t .. eof
6
L a v i s p L a L a eof eoln Posizione e contenuto della finestra
di lettura dopo il reset(ProvaF). Posizione e contenuto della finestra di lettura dopo readln(ProLett,Carattere); write(Carattere); L a eof eoln readln(Prolett,Carattere) eoln(Prolett) FALSE TRUE
7
Terminata la lettura di una riga
PROGRAM ProvaFiles(input,output,ProLett); {legge dal file TESTO i caratteri uno alla volta e li mostra a video} VAR ProLett: text; Carattere: char; BEGIN assign(ProLett,'C:\TP\ESEMPI\TESTO.TXT'); reset(ProLett); WHILE NOT eof(ProLett) DO WHILE NOT eoln(ProLett) DO read(ProLett,Carattere); write(Carattere) END; readln(ProLett); writeln; readln END. Terminata la lettura di una riga bisogna andare a capo
8
T eoln a s e r input False T ? 1° False e T 2° False r e 3° False e r
4° False s e 5° False a s 6° True eoln a Valori Finestra input eoln Ch letto Ch mostrato
9
rewrite (IdentificatoreFile)
SCRITTURA DI UN FILE La procedura rewrite prepara il file alla lettura. 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. Quando si scrive un file si presuppone sempre di comnciare dall’inizio del file. Se questo avesse già un contenuto questo verrebbe sovrascritto. Identificatore file rewrite ( ) rewrite (IdentificatoreFile) rewrite( ProvaF); prepara file per la scrittura
10
close (IdentificatoreFile)
SCRITTURA DI UN FILE close ( ) Identificatore file procedure close (IdentificatoreFile) Si può copiare un file in un altro anche leggendo un rigo alla volta close( Prodat); CHIUSURA DI UN FILE Dopo avere scritto un file è necessario chiuderlo. La procedura close(InFile) chiude il file identificato dalla variabile InFile
11
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} CONST LungMax=80; {massima lunghezza permessa alle stringhe } TYPE Stringa=STRING[LungMax]; {dipende dal dialetto} VAR ProInput,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} 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 '); readln END.
12
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.
13
ALGORITMI PER IL TRATTAMENTO DI FILE TESTO
read mode L a v i s p Finestra di lettura Variabile NomeFile InFile alla elaborazione write mode v i s p a buffer invio Variabile NomeFile OutFile eoln L
14
PROGRAM MostraFile(VispaTeresa, output);
{mostra il contenuto di un file su monitor} VAR VispaTeresa: text; BEGIN assign(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} WHILE NOT eoln(InFile) DO read(InFile,Carattere); {leggi il carattere} write(OutFile,Carattere) {scrivi il carattere} END; readln(InFile); writeln(OutFile) END
15
CREAZIONE DI UN FILE TESTO DA TASTIERA
PROGRAM Digitato(input, output, FileDigitato); {crea un file da tastiera e poi lo mostra } VAR FileDigitato: text; Risposta : char; {per rispondere al quesito} PROCEDURE Istruzioni; BEGIN writeln(‘Alla fine della digitazione premere CONTROL Z per chiudere il file) END; PROCEDURE CopiaFile(VAR InFile,OutFile: text); ********************* {************* 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 writeln; reset(FileDigitato); CopiaFile(FileDigitato,output) END; END.
16
LETTURA DEL NOME DEL FILE DURANTE L’ELABORAZIONE
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; 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;
17
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 quando battiamo 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) DO read(UnFile, Carattere) elabora carattere Senza questa istruzione se c’è un altro read verrà letto un blank. readln(UnFile) {azzera la finestra di lettura} 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)
18
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 di default input. Leggere caratteri fin quando non si incontra eoln Trovare il primo carattere diverso da blank Carattere ‘ ‘; IF NOT eoln(UnFile) THEN read(UnFile, Carattere); ELSE Carattere ‘ ‘ Carattere ‘ ‘; WHILE (Carattere =‘ ‘) AND NOT eoln(UnFile) DO read(UnFile, Carattere); readln;
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.