La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI."— Transcript della presentazione:

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

2 FILE TESTO - Contiene caratteri leggibili - E etichettato con un nome - Ha un indirizzo sullunità 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. Esempio La vispa Teresa avea tra lerbetta 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 assign( ProvaF, C:\TP\ESEMPI\TESTO.TXT'); assign (IdentificatoreFile,NomeFile) PROGRAM EcoFile(output, ProvaF); VAR ProvaF : text; } BEGIN assign( ProvaF, C:\TP\ESEMPI\TESTO.TXT'); ………….. END. assign ( ) Nome file Identificatore file procedure,

4 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 () Identificatore file procedure reset( ProvaF); prepara file per la lettura LavispaT VAX e standard Pascal reset(Testo) TURBO PASCAL assign(Infile,TESTO.txt) reset(Infile,TESTO.txt) APPLE PASCAL reset(Infile,TESTO.txt)

5 FILE TESTO Il file testo (.txt) è caratterizzato dallavere 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 lerbetta a volo sorpresa gentil farfalletta Struttura del file testo LavispaT aeolnasere a v tr.. eof eoln ea

6 Lavispa L Posizione e contenuto della finestra di lettura dopo il reset(ProvaF). a Posizione e contenuto della finestra di lettura dopo readln(ProLett,Carattere); write(Carattere); L a eof eoln a readln(Prolett,Carattere)a eoln(Prolett)FALSE eof eoln(Prolett)TRUE

7 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 BEGIN WHILE NOT eoln(ProLett) DO BEGIN read(ProLett,Carattere); write(Carattere) END; readln(ProLett); writeln; END; readln END. Terminata la lettura di una riga bisogna andare a capo

8 T eoln asere Valori Finestrainput eoln Ch letto Ch mostrato input False T ? 6° True eoln a a 5° False a s s 4° False s e e 3° False e r r 2° False r e e 1° False e T T

9 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 dallinizio del file. Se questo avesse già un contenuto questo verrebbe sovrascritto. rewrite (IdentificatoreFile) Identificatore file rewrite () rewrite( ProvaF); prepara file per la scrittura

10 SCRITTURA DI UN FILE Si può copiare un file in un altro anche leggendo un rigo alla volta close (IdentificatoreFile) close () Identificatore file 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

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} 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 '); 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è dallinizio fino a. 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. 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 write mode vispa buffer invio Variabile NomeFile OutFile eoln Lavispa read mode Lavispa i Finestra di lettura Variabile NomeFile InFile v alla elaborazione

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} BEGIN WHILE NOT eoln(InFile) DO BEGIN read(InFile,Carattere); {leggi il carattere} write(OutFile,Carattere){scrivi il carattere} END; readln(InFile); writeln(OutFile) END 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); 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.

16 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 LELABORAZIONE 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 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 altro read verrà letto un blank.

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 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;


Scaricare ppt "FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI."

Presentazioni simili


Annunci Google