Arquivos
Arquivos
• Programa = algoritmo + estrutura de dados
• Variáveis: usadas para construir estruturas de dados no ambiente do programa.
• Arquivos – são estruturas de dados
armazenadas em meios secundários: discos, mémorias flash, “na nuvem”, etc.
• Dados gravados em meios secundários não são voláteis.
Arquivos
• Dados armazenados em arquivos podem ser processados várias vezes, por vários programas, ao longo de muitos anos.
• As operações básicas de acesso a arquivos são:
– gravação ( ou escrita)
– de leitura ( ou de recuperação de dados) – pesquisa.
– atualização.
Arquivos
• A administração de arquivos em meios secundário são realizadas pelo sistema operacional da máquina.
• São elas:
– alocação e gravação no meio físico.
– organização e manutenção em pasta ou diretórios.
– copia ou remoção de arquivos.
Arquivos
• As operações controladas pelo programador são:
– abertura do arquivo.
– leitura do arquivo.
– gravação do arquivo.
– fechamento do arquivo.
Leitura de dados de Arquivo
• Editar e salvar arquivo de dados em ASCII (Editor do Turbo Pascal, Bloco de Notas, etc.)
• Declarar no Pascal uma variável tipo TEXT para referenciar o arquivo.
• Assinalar o nome do arquivo criado à variável declarada (procedure ASSIGN).
• Abrir o arquivo (procedure RESET)
Tipos de Arquivo
• Arquivo tipo texto – arquivos deste tipo são gravados como uma longa sequencia de caracteres, por exemplo, no padrão ASCII.
• Arquivo de registro – neste tipo de arquivo os dados são organizados em registros, onde cada registro é composto de um determinado número de campos.
– O arquivo é formado de uma sequencia de registros todos com os mesmos campos.
– Os registros podem ser gravados no formato texto, mas também podem ser gravados no formato binário correspondente a cada tipo definido para cada campo.
Tipos de Arquivo
• Arquivo de acesso sequencial – os registros são gravados sequencialmente e a sua leitura também ocorre de forma sequencial.
• Arquivo de acesso direto – cada registro é associado a uma chave (uma chave, pode ser entendida como um dos campos do registro) e o acesso a um registro em particular se faz pela identificação dessa chave.
Arquivos do tipo texto em Pascal
• Os dados para um programa em Pascal podem ser lidos a partir de um arquivo do tipo texto.
• Para isso e preciso editar e salvar arquivo de
dados usando um editor de texto tipo
ASCII (por exemplo, o Editor do Turbo
Pascal, Bloco de Notas, etc.)
Por exemplo, criar um arquivo com os elementos de uma matriz 6 x 6:
12 34 56 89 23 33 34 19 50 51 67 81 56 50 91 78 14 20 89 51 78 32 44 25 23 67 14 44 12 90 33 81 20 25 90 23
•Abra, por exemplo, uma janela do editor Bloco de Notas
•Digite os dados no formato mostrado acima.
•Salve o arquivo editado.
•Escolha um nome usando uma extensão a seu critário.
•Exemplo, no Bloco de Notas salve como “DADOS.DAD”
•No Bloco de Notas use “” no nome, senão o o arquivo será salvo com a extensão .txt.
Como programar a leitura?
• Em outras palavras, o que voce deverá colocar no programa em Pascal para que os dados do arquivo sejam lidos?
• Voce vai precisar de:
– identificar e assinalar o arquivo.
– abrir o arquivo para leitura
– direcionar o comando de leitura para o arquivo.
– fechar o arquivo.
Declarando Variável de referência ao arquivo
• Para identificar e assinalar um arquivo em Pascal, é preciso declarar uma variável do tipo arquivo de texto:
var <variável> : TEXT; {file of char }
• Exemplo:
var Arquivo: text;
• O nome do arquivo deverá ser associado à variável e a variável deverá ser usada em todas as operações de acesso ao arquivo (abertura, leitura, escrita e fechamento) .
Assinalar o nome do arquivo à variável de referência
• Usar o procedimento ASSIGN:
assign(<variável>, <nomeDoArquivo>);
• Exemplo:
...
var Arquivo: text;
begin
assign(Arquivo,’dados.dad’);
Assinalar o nome do arquivo à variável de referência
• O assinalamento pode ser feito através de uma variável literal:
var Arquivo :text;
var NomeDeArquivo: string[20];
...
begin
write ( ‘Digite o nome do arquivo’ );
readln(NomeDeArquivo);
assign(Arquivo,NomeDeArquivo);
...
Abrindo um Arquivo para Leitura
• Usar o procedimento RESET Reset(<variável>);
• Exemplo:
var Arquivo : text;
var NomeDeArquivo: string[20];
...
begin
write ( ‘Digite o nome do arquivo’ );
readln(NomeDeArquivo);
assign(Arquivo,NomeDeArquivo);
reset(Arquivo);
...
Leitura de dados de Arquivo
• Colocar a variável de referência ao arquivo no comando Read ou ReadLn
...
for L := 1 to 6 do for C := 1 to 6 do
read(Arquivo, Matriz[L,C]);
Fechamento do arquivo
• Para fechar um arquivo usar:
close(<variável de referencia>);
• Exemplo ...
for L := 1 to 6 do for C := 1 to 6 do
read(Arquivo, Matriz[L,C]);
close(Arquivo);
...
Program MatrizSimetrica;
var Matriz :array[1..6,1..6] of integer;
Arquivo : text; {Variável referencia de arquivo}
L,C : integer;
Chave : boolean;
begin { Inicio do Programa }
assing(Arquivo, ‘Dados.dad’ ); { Assinalamento do arquivo } reset(Arquivo); { Abertura do arquivo }
{ Leitura do arquivo } for L := 1 to 6 do for C := 1 to 6 do
read(Arquivo, Matriz[L,C]);
close(Arquivo); { Fechamento do arquivo, após a leitura }
{ Imprime a matriz lida } for L := 1 to 6 do begin
for C := 1 to 6 do write(Matriz[L,C]:5);
writeln;
end;
{ Verifica se a matriz é simétrica } Chave := true;
for L := 1 to 6 do for C := 1 to 6 do
if (Matriz[L,C] <> Matriz[C,L]) then Chave := false;
if (Chave)
then writeln( ‘A matriz é simétrica’ ) else writeln( ‘A matriz não é simétrica’ );
end.
program MatrizSimetrica;
var Matriz:array[1..6,1..6] of integer;
NomeDeArquivo : string[15]; {Variável para armazenar o nome do arquivo } Arquivo : text; {Variável que será associada ao arquivo } L,C : integer;
Chave : boolean;
Begin { inicio do programa }
{Pede o nome do arquivo a ser lido; se o arquivo não for encontrado outro nome é pedido. O processo só termina quando o nome digitado corresponder ao arquivo existente}
I := 1;
while (I <> 0) do begin
write ('Digite no nome do arquivo a ser lido: ‘ );
readln (NomeDeArquivo); {Le o nome do arquivo que o usuário deseja ler } assign (Arquivo, NomeDeArquivo); {Associa nome do arquivo à variável Arquivo}
{$I-} reset (Arquivo); {$I+} {Abre o arquivo para leitura }
I:= IOResult; {Se o arquivo não for encontrado, IOResult retorna um valor > 0}
if I > 0
then write ( ' Arquivo ‘ , NomeDeArquivo, ' NAO existe.‘ );
end;