{ File: fileint1.pas } program FileInteri; { Produce un file text contenente una sequenza di interi inserita in input (terminando con 0). Il nome del file da produrre viene fornito in input e letto mediante una variabile stringa. Il nome del file deve essere inserito in input, terminandolo con il carattere '='. Infine si chiede il nome di un file da stampare: cosi' si puo' vedere la stampa sullo schermo del file appena prodotto. } const DIMNOMEFILE = 12 ; { un file ha un nome di al piu' 12 caratteri } type TipoNomeFile = packed array [1..DIMNOMEFILE] of char; var emon : TipoNomeFile; { per leggere il nome dei file coinvolti } procedure LeggiNomeFile (var nome: TipoNomeFile); { Legge da input un nome di file e lo memorizza in nome. Il nome del file e' terminato dal carattere = Il nome del file potrebbe essere piu' breve di 12 caratteri; in tal caso viene operato un "blank filling" cioe' il riempimento del resto del vettore con spazi bianchi. } var i, j : 1..DIMNOMEFILE; { per scandire il resto del vettore al momento del blank filling } c : char; begin { LeggiNomeFile } writeln('lettura del nome del file (NOMEFILE.EXT):'); writeln(' TERMINARE IL NOME CON ''='''); read(c); { lettura primo carattere } i := 1; { indice prima componente da riempire } while (i < DIMNOMEFILE) and (c <> '=') do begin nome[i] := c; i := i+1; read(c); end; readln; { scartiamo eventuali caratteri addizionali lasciati in input } { riempimento del resto del vettore } for j := i to DIMNOMEFILE do nome[j] := ' ' end; { LeggiNomeFile } procedure CreaFile (nome: TipoNomeFile); { Produce un file text immettendovi interi letti in input terminati con 0. Il nome del file da creare e' passato per parametro. } var f : text; n : integer; begin { CreaFile } { assegnazione e apertura in scrittura; il nome del file concreto e' quello passato per parametro } assign(f, nome); rewrite(f); { lettura dati da input con immissione nel file (i numeri vengono distanziati da uno spazio bianco) } repeat write(' intero? '); readln(n); { se il numero letto e' zero, abbiamo finito e non memorizziamo lo zero nel file } if n <> 0 then begin writeln(f); write(f, n) end until n=0; { messaggio di fine operazione e chiusura file } writeln('creato file ', nome); close(f); writeln end; { CreaFile } { N.B. Nell'istruzione "if n<>0" precedente, provare a vedere cosa succede nel programma se si usa semplicemente "writeln(f,n)" invece delle due istruzioni di stampa (Suggerimento: se c'e' un EOLN in fondo al file, subito prima di EOF, il file non e' ancora finito dopo la lettura dell'ultimo intero che il file contiene). } procedure StampaFile (nome: TipoNomeFile); { Stampa un file text il cui nome e' passato per parametro. } var f : text; n : integer; begin { assegnazione e apertura in lettura; il nome del file concreto e' quello passato per parametro } assign(f, nome); reset(f); { lettura dal file e stampa su video } while not (eof(f)) do begin read(f, n); writeln(n); end; { chiusura del file usato } close(f); end; { StampaFile } begin { FileInteri } LeggiNomeFile(emon); writeln('dati da immettere in ', emon, ' ( 0 per finire ) : '); CreaFile(emon); writeln(' adesso stampo un file a tua scelta:'); LeggiNomeFile(emon); StampaFile(emon); writeln('<RET> per finire'); readln end. { FileInteri }