Pascal - Gestione dei file
Pascal tratta un file come una sequenza di componenti, che devono essere di tipo uniforme. Il tipo di file è determinato dal tipo di componenti. Il tipo di dati del file è definito come -
type
file-name = file of base-type;
Dove, il tipo di base indica il tipo dei componenti del file. Il tipo di base potrebbe essere qualsiasi cosa come, intero, reale, booleano, enumerato, sottointervallo, record, array e set tranne un altro tipo di file. Le variabili di un tipo di file vengono create utilizzando la dichiarazione var -
var
f1, f2,...: file-name;
Di seguito sono riportati alcuni esempi di definizione di alcuni tipi di file e variabili di file:
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studentdata: datafile;
rainfalldata: rfile;
tempdata: ifile;
choices: bfile;
Creazione e scrittura su un file
Scriviamo un programma che crei un file di dati per i record degli studenti. Creerebbe un file chiamato students.dat e vi scriverà i dati di uno studente -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'John Smith';
Student.s_addr := 'United States of America';
Student.s_batchcode := 'Computer Science';
Write(f,Student);
Close(f);
end.
Una volta compilato ed eseguito, il programma creerebbe un file denominato students.dat nella directory di lavoro. Puoi aprire il file utilizzando un editor di testo, come il blocco note, per esaminare i dati di John Smith.
Leggere da un file
Abbiamo appena creato e scritto in un file chiamato students.dat. Ora, scriviamo un programma che legga i dati dello studente dal file -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
assign(f, 'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ', Student.s_batchcode);
end;
close(f);
end.
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Name: John Smith
Address: United States of America
Batch Code: Computer Science
File come parametri di sottoprogramma
Pascal consente di utilizzare le variabili di file come parametri nei sottoprogrammi standard e definiti dall'utente. Il seguente esempio illustra questo concetto. Il programma crea un file chiamato rain.txt e memorizza alcuni dati sulle precipitazioni. Successivamente, apre il file, legge i dati e calcola la piovosità media.
Si prega di notare che, if you use a file parameter with subprograms, it must be declared as a var parameter.
program addFiledata;
const
MAX = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to MAX do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f, data);
end;
close(f);
end;
procedure computeAverage(var x: raindata);
var
d, sum: real;
average: real;
begin
reset(x);
sum:= 0.0;
while not eof(x) do
begin
read(x, d);
sum := sum + d;
end;
average := sum/MAX;
close(x);
writeln('Average Rainfall: ', average:7:2);
end;
begin
writeln('Enter the File Name: ');
readln(filename);
assign(rainfile, filename);
writedata(rainfile);
computeAverage(rainfile);
end.
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25
File di testo
Un file di testo, in Pascal, è costituito da righe di caratteri in cui ogni riga termina con un indicatore di fine riga. Puoi dichiarare e definire file come:
type
file-name = text;
La differenza tra un normale file di caratteri e un file di testo è che un file di testo è diviso in righe, ciascuna terminata da uno speciale marcatore di fine riga, inserito automaticamente dal sistema. L'esempio seguente crea e scrive in un file di testo denominato contact.txt -
program exText;
var
filename, data: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile, filename);
rewrite(myfile);
writeln(myfile, 'Note to Students: ');
writeln(myfile, 'For details information on Pascal Programming');
writeln(myfile, 'Contact: Tutorials Point');
writeln('Completed writing');
close(myfile);
end.
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Enter the file name:
contact.txt
Completed writing
Aggiunta a un file
Aggiungere a un file significa scrivere su un file esistente che contiene già alcuni dati senza sovrascrivere il file. Il seguente programma lo illustra:
program exAppendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Contact Details');
writeln('[email protected]');
close(myfile);
(* let us read from this file *)
assign(myfile, 'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
readln(myfile, info);
writeln(info);
end;
close(myfile);
end.
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point
Funzioni di gestione dei file
Free Pascal fornisce le seguenti funzioni / procedure per la gestione dei file:
Sr.No. | Nome e descrizione della funzione |
---|---|
1 | procedure Append(var t: Text); Apre un file in modalità di aggiunta |
2 | procedure Assign(out f: file; const Name:); Assegna un nome a un file |
3 | procedure Assign(out f: file; p: PChar); Assegna un nome a un file |
4 | procedure Assign(out f: file; c: Char); Assegna un nome a un file |
5 | procedure Assign(out f: TypedFile; const Name:); Assegna un nome a un file |
6 | procedure Assign(out f: TypedFile; p: PChar); Assegna un nome a un file |
7 | procedure Assign(out f: TypedFile; c: Char); Assegna un nome a un file |
8 | procedure Assign(out t: Text; const s:); Assegna un nome a un file |
9 | procedure Assign(out t: Text; p: PChar); Assegna un nome a un file |
10 | procedure Assign(out t: Text; c: Char); Assegna un nome a un file |
11 | procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64); Legge i dati da un file in memoria |
12 | procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt); Legge i dati da un file in memoria |
13 | procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal); Legge i dati da un file in memoria |
14 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word); Legge i dati da un file in memoria |
15 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer); Legge i dati da un file in memoria |
16 | procedure BlockRead(var f: file; var Buf; count: Int64); Legge i dati da un file in memoria |
17 | procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64); Scrive i dati dalla memoria in un file |
18 | procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt); Scrive i dati dalla memoria in un file |
19 | procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal); Scrive i dati dalla memoria in un file |
20 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word); Scrive i dati dalla memoria in un file |
21 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer); Scrive i dati dalla memoria in un file |
22 | procedure BlockWrite(var f: file; const Buf; Count: LongInt); Scrive i dati dalla memoria in un file |
23 | procedure Close(var f: file); Chiude un file |
24 | procedure Close(var t: Text); Chiude un file |
25 | function EOF(var f: file):Boolean; Controlla la fine del file |
26 | function EOF(var t: Text):Boolean; Controlla la fine del file |
27 | function EOF: Boolean; Controlla la fine del file |
28 | function EOLn(var t: Text):Boolean; Controlla la fine della riga |
29 | function EOLn: Boolean; Controlla la fine della riga |
30 | procedure Erase(var f: file); Elimina il file dal disco |
31 | procedure Erase(var t: Text); Elimina il file dal disco |
32 | function FilePos( var f: file):Int64; Posizione nel file |
33 | function FileSize(var f: file):Int64; Dimensioni del file |
34 | procedure Flush(var t: Text); Scrive i buffer di file su disco |
35 | function IOResult: Word; Restituisce il risultato dell'ultima operazione di I / O del file |
36 | procedure Read(var F: Text; Args: Arguments); Legge dal file nella variabile |
37 | procedure Read(Args: Arguments); Legge dal file nella variabile |
38 | procedure ReadLn(var F: Text; Args: Arguments); Legge dal file nella variabile e passa alla riga successiva |
39 | procedure ReadLn(Args: Arguments); Legge dal file nella variabile e passa alla riga successiva |
40 | procedure Rename(var f: file; const s:); Rinomina il file su disco |
41 | procedure Rename(var f: file; p: PChar); Rinomina il file su disco |
42 | procedure Rename(var f: file; c: Char); Rinomina il file su disco |
43 | procedure Rename(var t: Text; const s); Rinomina file su disco |
44 | procedure Rename(var t: Text; p: PChar); Rinomina il file su disco |
45 | procedure Rename( var t: Text; c: Char); Rinomina il file su disco |
46 | procedure Reset(var f: file; l: LongInt); Apre il file per la lettura |
47 | procedure Reset(var f: file); Apre il file per la lettura |
48 | procedure Reset(var f: TypedFile); Apre il file per la lettura |
49 | procedure Reset(var t: Text); Apre il file per la lettura |
50 | procedure Rewrite(var f: file; l: LongInt); Apre il file per la scrittura |
51 | procedure Rewrite(var f: file); Apre il file per la scrittura |
52 | procedure Rewrite(var f: TypedFile); Apre il file per la scrittura |
53 | procedure Rewrite(var t: Text); Apre il file per la scrittura |
54 | procedure Seek(var f: file; Pos: Int64); Imposta la posizione del file |
55 | function SeekEOF(var t: Text):Boolean; Imposta la posizione del file alla fine del file |
56 | function SeekEOF: Boolean; Imposta la posizione del file alla fine del file |
57 | function SeekEOLn(var t: Text):Boolean; Imposta la posizione del file alla fine della riga |
58 | function SeekEOLn: Boolean; Imposta la posizione del file alla fine della riga |
59 | procedure SetTextBuf(var f: Text; var Buf); Imposta la dimensione del buffer del file |
60 | procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt); Imposta la dimensione del buffer del file |
61 | procedure Truncate(var F: file); Tronca il file alla posizione |
62 | procedure Write(Args: Arguments); Scrive la variabile su file |
63 | procedure Write(var F: Text; Args: Arguments); Scrivi variabile su file |
64 | procedure Writeln(Args: Arguments); Scrive la variabile nel file e accoda la nuova riga |
65 | procedure WriteLn(var F: Text; Args: Arguments); Scrive la variabile nel file e accoda la nuova riga |