Download - Algoritmos - Arquivos Parte 1
Eng.Comp.Eng.Comp.
ARQUIVOS
Profª Ms. Engª Elaine Cecília GattoCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado Coração – USCBauru/SP
28/11/2013
1
Eng.Comp.
Introdução
• São estruturas de Dados manipuladas forado ambiente do programa.
• Ambiente do programa: memória principalou memória ram.
• Um arquivo é armazenado em umdispositivo de memória secundária
28/11/2013
2
Eng.Comp.
Introdução
• Memória secundária: discos rígidos.
• Discos rídigos:
– Podem ser lidos ou escritos por umprograma
– É formado por uma coleção de caracteresou bytes
28/11/2013
3
Eng.Comp.
Introdução
• Arquivo de texto: coleção de caracteres
• Arquivo binário: bytes armazenados
• Sistema de banco de dados: Composto porum ou vários arquivos de dados 2
8/11/2013
4
Eng.Comp.
Introdução
• Programas de manutenção de um arquivo:
– Inclusão
– Exclusão Lógica
– Exclusão física
– Alteração
– Consulta geral
– Consulta específica
– Relatórios
28/11/2013
5
Eng.Comp.
Introdução
• Exclusão física: após a eliminação de umregistro, os demais são deslocados
• Exclusão lógica: os registros possuem umcampo adicional, identificando se estão ativosou inativos (se foram ou não excluídos)
• CAMPO ATIVO = 0 : o arquivo foi excluído
• CAMPO ATIVO = 1 : o arquivo NÃO foiexcluído
28/11/2013
6
Eng.Comp.
Declaração
• TYPE : palavra chave utilizada para a criação de novos tipos de dados emPASCAL
TYPE nome_do_registro = RECORD
Campo1: tipo_do_campo1;
Campo2: tipo_do_campo2;
...
CampoN: tipo_do_campoN;
END;
nome_do_arquivo = FILE OF nome_do_registro;
VAR
variavel_do_arquivo: nome_do_arquivo;
variavel_do_registro: nome_do_registro;
28/11/2013
7
Eng.Comp.
EXEMPLO 1
//definindo um registro
TYPE registro = RECORD
nome : string[30];
endereco : string[20];
telefone : string[10];
END;
//variável capaz de referenciar arquivos que armazenam dados no
formato registro
arquivo = FILE OF registro;
//as informações geradas pelo programa serão armazenadas em REG.
A variável REG será gravada no arquivo referenciado por AGENDA.
VAR
agenda: arquivo;
reg : registro;
28/11/2013
8
Eng.Comp.
EXEMPLO 2
//definindo um registro
TYPE registro = RECORD
placa: string[7];
marca : string[20];
ano : integer;
END;
//variável capaz de referenciar arquivos que armazenam dados no
formato registro
frota = FILE OF registro;
//as informações geradas pelo programa serão armazenadas em
CARROS. A variável CARROS será gravada no arquivo referenciado
por DETRAN.
VAR
detran: arquivo;
carros : registro;
28/11/2013
9
Eng.Comp.
Associando variáveis a arquivos
• ASSIGN:
– Comando usado para associar nomes dearquivos físicos a variáveis de umprograma.
–Uma ligação é estabelecida entre aexecução de um programa na memóriaprincipal e os dados armazenados namemória secundária
28/11/2013
10
Eng.Comp.
Associando variáveis a arquivos
ASSIGN(nome_da_variável_do_tipo_arquivo,
’caminho do arquivo no disco’);
ASSIGN(AGENDA,‘AGENDA.DAT’);
• A variável AGENDA permite acesso ao arquivoAGENDA.DAT
• Neste exemplo, o arquivo AGENDA.DAT serágravado no mesmo local do arquivo que estiversendo executado.
28/11/2013
11
Eng.Comp.
Associando variáveis a arquivos
ASSIGN(DETRAN,’C:\EXEMPLO\CARROS.DAT’);
• A variável DETRAN permite acesso ao arquivoCARROS.DAT
• CARROS.DAT será armazenado no caminhoC:\EXEMPLOS
28/11/2013
12
Eng.Comp.
Criando um novo Arquivo
• REWRITE
• Comando para criar novos arquivos;
• Posiciona o seu ponteiro no primeiro registro,apagando todo o conteúdo do arquivo;
• Se o arquivo referenciado na criação existir,ele perderá todo o seu conteúdo
• Se o arquivo referenciado na criação NÃOexistir, o comando forçará a sua criação.
28/11/2013
13
Eng.Comp.
Criando um novo Arquivo
REWRITE(nome_da_variavel_do_tipo
_arquivo);
REWRITE(AGENDA);
REWRITE(DETRAN); 28/11/2013
14
Eng.Comp.
Abrindo arquivos já existentes
• RESET
• Usado para abrir arquivos;
• Posiciona o ponteiro no primeiro registro,SEM destruir os dados já existentes; 2
8/11/2013
15
Eng.Comp.
Abrindo arquivos já existentes
RESET(nome_da_variavel_do_tipo_
arquivo);
RESET(AGENDA);
RESET(DETRAN); 28/11/2013
16
Eng.Comp.
Fechando um arquivo
• CLOSE
• Usado para fechar arquivos abertos pelocomando REWRITE ou RESET;
• Todas as mudanças feitas em um arquivo sósão efetivadas quando ele for fechado;
• Nenhuma mudança poderá ser feita em umarquivo fechado
28/11/2013
17
Eng.Comp.
Fechando um arquivo
CLOSE(nome_da_variavel_do_tipo_ar
quivo);
CLOSE(AGENDA);
CLOSE(DETRAN); 28/11/2013
18
Eng.Comp.
Lendo dados de um arquivo
• READ
• Comando para leitura de arquivos;
• Para ler dados de um arquivo, devemosexecutar uma leitura no disco; 2
8/11/2013
19
Eng.Comp.
Lendo dados de um arquivo
READ(nome_da_variavel__do_tipo_arquivo,
nome_da_variavel_do_tipo_registro);
//os dados lidos no arquivo associado à variável
AGENDA serão copiados para a variável de programa
REG, que será tratada pelo programna como um
registro qualquer
READ(AGENDA, REG);
//os dados lidos no arquivo associado à variável
DETRAN serão copiados para a variável de programa
CARROS, que será tratada pelo programna como um
registro qualquer
READ(DETRAN, CARROS);
28/11/2013
20
Eng.Comp.
Gravando dados em um arquivo
WRITE: Permite a gravação de dados
WRITE(nome_da_variável_do_tipo_arquivo,
nome_da_variavel_do_tipo_registro);
//Os dados contidos na variável de programa REG
serão copiados para o arquivo associado à
variável AGENDA
WRITE(AGENDA, REG);
//Os dados contidos na variável de programa
CARROS serão copiados para o arquivo associado à
variável AGENDA
WRITE(AGENDA, CARROS);
28/11/2013
21
Eng.Comp.
Movimentando o ponteiro em um arquivo
• SEEK:
• Usado para posicionar o ponteiro no registrodesejado;
• O primeiro registro do arquivo é sempre o denúmero zero;
28/11/2013
22
Eng.Comp.
Movimentando o ponteiro em um arquivo
SEEk(nome_da_variavel_do_tipo_arquivo,
numero_do_registro);
//O ponteiro do arquivo DETRAN está na
posição dois, no início do terceiro
registro gravado no arquivo
SEEK(AGENDA, 2);
//O ponteiro do arquivo DETRAN está na
posição zero, no início do primeiro
registro gravado no arquivo
SEEK(DETRAN, 0);
28/11/2013
23
Eng.Comp.
Obtendo o número de registros de um arquivo
• FILESIZE: Usado para retornar o número deregistros existentes em um arquivo
FILESIZE(nome_da_variavel_do_tipo_arquivo);
//retorna a quantidade de registros gravados
no arquivo AGENDA
Tamanho := FILESIZE(AGENDA);
//retorna a quantidade de registros gravados
no arquivo DETRAN
Tamanho := FILESIZE(DETRAN);
28/11/2013
24
Eng.Comp.
Verificando o final do arquivo
• EOF:
• Verifica se o ponteiro chegou ao final do arquivo;
• Retorno verdadeiro: o final do arquivo foiencontrado;
• Retorno falso: o final do arquivo não foiencontrado
28/11/2013
25
Eng.Comp.
Verificando o final do arquivo
WHILE NOT EOF(nome_da_variavel_do_tipo_arquivo) DO
BEGIN
comandos;
END;
//percorre todos os registros de um arquivo. A cada
leitura feita no arquivo DETRAN, o ponteiro movimenta-se
para o registro seguinte. Enquanto foram obtidas
informações no arquivo, a repetição continuará. Quando o
ponteiro chegar ao final do arquivo DETRAN, o WHILE será
finalizado.
WHILE NOT EOF(DETRAN) DO
BEGIN
READ(DETRAN, REG);
END;
28/11/2013
26
Eng.Comp.
Exemplo
PROGRAM EX1;
USES CRT;
TYPE aluno = RECORD
numero : INTEGER;
nome : STRING[20];
curso: STRING[15];
nota1, nota2 : REAL;
END;
classe = FILE OF aluno;
VAR ALUNOS: classe;
A: aluno;
BEGIN
CLRSCR;
ASSIGN(ALUNOS, 'C:\Dev-Pas\ALUNOS.TXT');
REWRITE(ALUNOS);
CLOSE(ALUNOS);
WRITELN('Arquivo de ALUNOS criado com sucesso!!!');
READLN;
END.
28/11/2013
27
Eng.Comp.
Exemplo
Pegar no syllabus
28/11/2013
28