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 |