Créditos FEC- Unican
Arquivos texto
Na aula anterior, vimos como acessar arquivos e as operações existentes para essa finalidade. Os arquivos gerados pelo programa exemplo 4.7 são arquivos binários. Esse tipo de arquivo não legível às pessoas, embora seja útil para fins de armazenamento de informações, visto que os dados são armazenados de forma comprimida, que diminui o tamanho do arquivo, e também restringe o acesso às informações contidas no arquivo. A linguagem Pascal também provê meios para lidar com um arquivo texto. A seguir mostramos como tratar arquivos em Pascal.
As operações de abertura, de associação entre o nome interno e externo, de fechamento, de leitura, de escrita de um arquivo texto são as mesmas que dos arquivos binários. No entanto, para se declarar um arquivo texto utiliza-se uma outra notação:
lista-de-identificadores:text
lista-de-identificadores são nomes associados aos arquivos declarados como texto.
Outra diferença com relação às operações é a possibilidade de utilização dos comandos readln e writeln sobre arquivos texto, o que não é possível sobre arquivos binários, visto que estes não possuem marca de final de linha. A diferença entre os comandos read e readln, write e writeln é basicamente a mesma quando utilizados como comandos de entrada e saída. Os comandos read e write operam sobre campos, enquanto que os comandos readln e writeln operam sobre linhas.
Exemplos
Esse programa lê um arquivo texto, exibe o seu conteúdo na tela e o número de linhas do arquivo.
program le_arquivo_texto;
var
entrada : text;
linha : string[100];
nlinhas : integer;
begin
nlinhas = 0;
assign(entrada,'arq1.txt');
reset(entrada);
readln(entrada,linha); {lê cada linha do arquivo}
while (not EOF(entrada)) do
begin
writeln(linha);
readln(entrada,linha);
nlinhas := nlinhas + 1;
end;
writeln('Número de linhas do arquivo: ',nlinhas);
close(entrada);
end.
O próximo programa lê 10 linhas contendo três campos do tipo inteiro, lê 10 linhas contendo três campos do tipo real, somando os valores de cada linha e colocando o resultado em um arquivo de saída. O programa assume que o arquivo de entrada já esteja no formato correto.
program le_valores_inteiro_real;
var
arq_in, arq_out : text;
vi1, vi2, vi3, somai : integer;
vr1, vr2, vr3, somar : real;
i : integer;
begin
assign(arq_in,'dados.txt');
assign(arq_out,'saida.txt');
reset(arq_in);
rewrite(arq_out);
for i:= 1 to 10 do
begin
readln(arq_in,vi1,vi1,vi3);
somai := vi1 + vi2 + vi3;
writeln(arq_out,'linha ',i ,' - soma = ',somai);
end;
for i:= 1 to 10 do
begin
readln(arq_in,vr1,vr1,vr3);
somar := vr1 + vr2 + vr3;
writeln(arq_out, 'linha ',i+10 ,' - soma = ',somar:10:4);
end;
close(arq_in);
close(arq_out);
end.
Exemplo do conteúdo do arquivo dados.txt:
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 27
28 29 30
31 32 33
34 35 36
37 38 39
50.00 51.10 52.20
53.30 54.40 55.50
56.60 57.70 58.80
59.90 60.00 61.10
62.20 63.30 64.40
65.50 66.60 67.70
68.80 69.90 70.00
71.10 72.20 73.30
74.40 75.50 76.60
77.70 78.80 79.90
Arquivos texto
Na aula anterior, vimos como acessar arquivos e as operações existentes para essa finalidade. Os arquivos gerados pelo programa exemplo 4.7 são arquivos binários. Esse tipo de arquivo não legível às pessoas, embora seja útil para fins de armazenamento de informações, visto que os dados são armazenados de forma comprimida, que diminui o tamanho do arquivo, e também restringe o acesso às informações contidas no arquivo. A linguagem Pascal também provê meios para lidar com um arquivo texto. A seguir mostramos como tratar arquivos em Pascal.
As operações de abertura, de associação entre o nome interno e externo, de fechamento, de leitura, de escrita de um arquivo texto são as mesmas que dos arquivos binários. No entanto, para se declarar um arquivo texto utiliza-se uma outra notação:
lista-de-identificadores:text
lista-de-identificadores são nomes associados aos arquivos declarados como texto.
Outra diferença com relação às operações é a possibilidade de utilização dos comandos readln e writeln sobre arquivos texto, o que não é possível sobre arquivos binários, visto que estes não possuem marca de final de linha. A diferença entre os comandos read e readln, write e writeln é basicamente a mesma quando utilizados como comandos de entrada e saída. Os comandos read e write operam sobre campos, enquanto que os comandos readln e writeln operam sobre linhas.
Exemplos
Esse programa lê um arquivo texto, exibe o seu conteúdo na tela e o número de linhas do arquivo.
program le_arquivo_texto;
var
entrada : text;
linha : string[100];
nlinhas : integer;
begin
nlinhas = 0;
assign(entrada,'arq1.txt');
reset(entrada);
readln(entrada,linha); {lê cada linha do arquivo}
while (not EOF(entrada)) do
begin
writeln(linha);
readln(entrada,linha);
nlinhas := nlinhas + 1;
end;
writeln('Número de linhas do arquivo: ',nlinhas);
close(entrada);
end.
O próximo programa lê 10 linhas contendo três campos do tipo inteiro, lê 10 linhas contendo três campos do tipo real, somando os valores de cada linha e colocando o resultado em um arquivo de saída. O programa assume que o arquivo de entrada já esteja no formato correto.
program le_valores_inteiro_real;
var
arq_in, arq_out : text;
vi1, vi2, vi3, somai : integer;
vr1, vr2, vr3, somar : real;
i : integer;
begin
assign(arq_in,'dados.txt');
assign(arq_out,'saida.txt');
reset(arq_in);
rewrite(arq_out);
for i:= 1 to 10 do
begin
readln(arq_in,vi1,vi1,vi3);
somai := vi1 + vi2 + vi3;
writeln(arq_out,'linha ',i ,' - soma = ',somai);
end;
for i:= 1 to 10 do
begin
readln(arq_in,vr1,vr1,vr3);
somar := vr1 + vr2 + vr3;
writeln(arq_out, 'linha ',i+10 ,' - soma = ',somar:10:4);
end;
close(arq_in);
close(arq_out);
end.
Exemplo do conteúdo do arquivo dados.txt:
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 27
28 29 30
31 32 33
34 35 36
37 38 39
50.00 51.10 52.20
53.30 54.40 55.50
56.60 57.70 58.80
59.90 60.00 61.10
62.20 63.30 64.40
65.50 66.60 67.70
68.80 69.90 70.00
71.10 72.20 73.30
74.40 75.50 76.60
77.70 78.80 79.90