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