Pascal - Tratamento de Arquivos

Pascal trata um arquivo como uma sequência de componentes, que devem ser de tipo uniforme. O tipo de arquivo é determinado pelo tipo dos componentes. O tipo de dados do arquivo é definido como -

type
file-name = file of base-type;

Onde, o tipo-base indica o tipo dos componentes do arquivo. O tipo base pode ser qualquer coisa como inteiro, real, booleano, enumerado, subfaixa, registro, matrizes e conjuntos, exceto outro tipo de arquivo. Variáveis ​​de um tipo de arquivo são criadas usando a declaração var -

var
f1, f2,...: file-name;

A seguir estão alguns exemplos de definição de alguns tipos de arquivo e variáveis ​​de arquivo -

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;

Criação e gravação em um arquivo

Vamos escrever um programa que criaria um arquivo de dados para os registros dos alunos. Ele criaria um arquivo chamado students.dat e escreveria os dados de um aluno nele -

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.

Quando compilado e executado, o programa cria um arquivo chamado students.dat no diretório de trabalho. Você pode abrir o arquivo usando um editor de texto, como o bloco de notas, para ver os dados de John Smith.

Lendo de um arquivo

Acabamos de criar e gravar em um arquivo chamado students.dat. Agora, vamos escrever um programa que leia os dados do aluno do arquivo -

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 o código acima é compilado e executado, ele produz o seguinte resultado -

Name: John Smith
Address: United States of America
Batch Code: Computer Science

Arquivos como parâmetro de subprograma

Pascal permite que variáveis ​​de arquivo sejam usadas como parâmetros em subprogramas padrão e definidos pelo usuário. O exemplo a seguir ilustra esse conceito. O programa cria um arquivo chamado chuva.txt e armazena alguns dados de chuva. Em seguida, ele abre o arquivo, lê os dados e calcula a precipitação média.

Observe que, 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 o código acima é compilado e executado, ele produz o seguinte resultado -

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

Arquivos de Texto

Um arquivo de texto, em Pascal, consiste em linhas de caracteres onde cada linha termina com um marcador de fim de linha. Você pode declarar e definir arquivos como -

type
file-name = text;

A diferença entre um arquivo normal de caracteres e um arquivo de texto é que um arquivo de texto é dividido em linhas, cada uma terminada por um marcador especial de fim de linha, inserido automaticamente pelo sistema. O exemplo a seguir cria e grava em um arquivo de texto denominado 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 o código acima é compilado e executado, ele produz o seguinte resultado -

Enter the file name:
contact.txt 
Completed writing

Anexando a um arquivo

Anexar a um arquivo significa gravar em um arquivo existente que já contém alguns dados sem sobrescrever o arquivo. O programa a seguir ilustra isso -

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 o código acima é compilado e executado, ele produz o seguinte resultado -

Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point

Funções de tratamento de arquivos

O Free Pascal fornece as seguintes funções / procedimentos para manipulação de arquivos -

Sr. Não. Nome e descrição da função
1

procedure Append(var t: Text);

Abre um arquivo no modo anexar

2

procedure Assign(out f: file; const Name:);

Atribui um nome a um arquivo

3

procedure Assign(out f: file; p: PChar);

Atribui um nome a um arquivo

4

procedure Assign(out f: file; c: Char);

Atribui um nome a um arquivo

5

procedure Assign(out f: TypedFile; const Name:);

Atribui um nome a um arquivo

6

procedure Assign(out f: TypedFile; p: PChar);

Atribui um nome a um arquivo

7

procedure Assign(out f: TypedFile; c: Char);

Atribui um nome a um arquivo

8

procedure Assign(out t: Text; const s:);

Atribui um nome a um arquivo

9

procedure Assign(out t: Text; p: PChar);

Atribui um nome a um arquivo

10

procedure Assign(out t: Text; c: Char);

Atribui um nome a um arquivo

11

procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64);

Lê dados de um arquivo na memória

12

procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt);

Lê dados de um arquivo na memória

13

procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal);

Lê dados de um arquivo na memória

14

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word);

Lê dados de um arquivo na memória

15

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer);

Lê dados de um arquivo na memória

16

procedure BlockRead(var f: file; var Buf; count: Int64);

Lê dados de um arquivo na memória

17

procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64);

Grava dados da memória em um arquivo

18

procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt);

Grava dados da memória em um arquivo

19

procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal);

Grava dados da memória em um arquivo

20

procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word);

Grava dados da memória em um arquivo

21

procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer);

Grava dados da memória em um arquivo

22

procedure BlockWrite(var f: file; const Buf; Count: LongInt);

Grava dados da memória em um arquivo

23

procedure Close(var f: file);

Fecha um arquivo

24

procedure Close(var t: Text);

Fecha um arquivo

25

function EOF(var f: file):Boolean;

Verifica o fim do arquivo

26

function EOF(var t: Text):Boolean;

Verifica o fim do arquivo

27

function EOF: Boolean;

Verifica o fim do arquivo

28

function EOLn(var t: Text):Boolean;

Verifica o fim da linha

29

function EOLn: Boolean;

Verifica o fim da linha

30

procedure Erase(var f: file);

Exclui arquivo do disco

31

procedure Erase(var t: Text);

Exclui arquivo do disco

32

function FilePos( var f: file):Int64;

Posição no arquivo

33

function FileSize(var f: file):Int64;

Tamanho do arquivo

34

procedure Flush(var t: Text);

Grava buffers de arquivo no disco

35

function IOResult: Word;

Retorna o resultado da última operação de IO do arquivo

36

procedure Read(var F: Text; Args: Arguments);

Lê do arquivo para a variável

37

procedure Read(Args: Arguments);

Lê do arquivo para a variável

38

procedure ReadLn(var F: Text; Args: Arguments);

Lê do arquivo para a variável e vai para a próxima linha

39

procedure ReadLn(Args: Arguments);

Lê do arquivo para a variável e vai para a próxima linha

40

procedure Rename(var f: file; const s:);

Renomeia o arquivo no disco

41

procedure Rename(var f: file; p: PChar);

Renomeia o arquivo no disco

42

procedure Rename(var f: file; c: Char);

Renomeia o arquivo no disco

43

procedure Rename(var t: Text; const s);

Renomear arquivo no disco

44

procedure Rename(var t: Text; p: PChar);

Renomeia o arquivo no disco

45

procedure Rename( var t: Text; c: Char);

Renomeia o arquivo no disco

46

procedure Reset(var f: file; l: LongInt);

Abre o arquivo para leitura

47

procedure Reset(var f: file);

Abre o arquivo para leitura

48

procedure Reset(var f: TypedFile);

Abre o arquivo para leitura

49

procedure Reset(var t: Text);

Abre o arquivo para leitura

50

procedure Rewrite(var f: file; l: LongInt);

Abre o arquivo para gravação

51

procedure Rewrite(var f: file);

Abre o arquivo para gravação

52

procedure Rewrite(var f: TypedFile);

Abre o arquivo para gravação

53

procedure Rewrite(var t: Text);

Abre o arquivo para gravação

54

procedure Seek(var f: file; Pos: Int64);

Define a posição do arquivo

55

function SeekEOF(var t: Text):Boolean;

Define a posição do arquivo no final do arquivo

56

function SeekEOF: Boolean;

Define a posição do arquivo no final do arquivo

57

function SeekEOLn(var t: Text):Boolean;

Define a posição do arquivo no final da linha

58

function SeekEOLn: Boolean;

Define a posição do arquivo no final da linha

59

procedure SetTextBuf(var f: Text; var Buf);

Define o tamanho do buffer do arquivo

60

procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt);

Define o tamanho do buffer do arquivo

61

procedure Truncate(var F: file);

Truncar o arquivo na posição

62

procedure Write(Args: Arguments);

Grava a variável no arquivo

63

procedure Write(var F: Text; Args: Arguments);

Grave a variável no arquivo

64

procedure Writeln(Args: Arguments);

Grava a variável no arquivo e acrescenta nova linha

65

procedure WriteLn(var F: Text; Args: Arguments);

Grava a variável no arquivo e acrescenta nova linha