algoritmos e estruturas de dados ii
DESCRIPTION
Algoritmos e Estruturas de Dados II. ARQUIVOS Rodney Carneiro. Arquivos. Permitem o armazenamento permanente dos dados, ao contrário das variáveis, que eram armazenadas em memória principal; Exemplos: informações bancárias, dados de uma companhia telefônica, um simples cadastro de clientes; - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/1.jpg)
Algoritmos e Estruturas de Dados II
ARQUIVOS
Rodney Carneiro
![Page 2: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/2.jpg)
Arquivos
Permitem o armazenamento permanente dos dados, ao contrário das variáveis, que eram armazenadas em memória principal;– Exemplos: informações bancárias, dados de uma
companhia telefônica, um simples cadastro de clientes;
Um arquivo é uma estrutura criada em disco, ou em uma unidade de armazenamento permanente;
![Page 3: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/3.jpg)
Arquivos Um arquivo é uma estrutura de dados
formada por um conjunto de registros, que por sua vez, são possuem campos de informação;
Um registro não ocupa uma posição fixa dentro de um arquivo, pois este não possui tamanho pré-estabelecido (tamanho variável)
Arquivo
Registros
Campos
Campos... ...
Registros
Campos
Campos...
Registros
Campos
Campos...
Disco
![Page 4: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/4.jpg)
Arquivos
Então podemos enxergar um arquivo como uma coleção de registros, que por sua vez armazenam um conjunto de campos relacionados à um mesmo item de dado;
Um mesmo arquivo pode ser manipulado por algoritmos diferentes. Desta forma, um arquivo pode ser aberto por diferentes programas, desde que os mesmos estejam preparados para isto;
![Page 5: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/5.jpg)
Estrutura Física de um ArquivoQuando um arquivo FILE é criado, o mesmo possui a seguinte estrutura:A posição física corresponde a um número que é gerado automaticamente no instante que uma informação qualquer é incluída no arquivo. Este número corresponde ao “Endereço” da informação no arquivo, sendo que é através deste Endereço que é possível recuperar qualquer informação, sem precisar percorrer todo o arquivo em busca da mesma, ao invés disto basta fornecer o número da posição física da informação no arquivo.
![Page 6: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/6.jpg)
Arquivos A primeira coisa que deve ser feita para se
criar um arquivo, é declará-lo. E para isto, é preciso definir de que tipo são os registros que ele armazenará;
Exemplo:– Criação de um arquivo
para armazenar informações
de clientes (nome, telefone,
endereço e cidade);
Type cliente = record codigo : integer; nome : string[20]; telefone : string[14]; endereco : string[30]; cidade : string[20]; end;Var aux: cliente; arq_nome: file of cliente;
Type cliente = record codigo : integer; nome : string[20]; telefone : string[14]; endereco : string[30]; cidade : string[20]; end;Var aux: cliente; arq_nome: file of cliente;
![Page 7: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/7.jpg)
Arquivos Depois da criação de um arquivo, ele pode
ser utilizado de duas formas:– O arquivo pode ser consultado, fornecendo
informações previamente gravadas nele (leitura);– O arquivo pode ser acrescido de novas
informações (escrita ou gravação);
Os algoritmos básicos envolvidos nestas duas circunstâncias são:
Consultar arquivo Acrescentar arquivo
Abrir arquivo Abrir arquivo
Achar item procurado Achar posição da inserção
Copiar informações Gravar informações
Fechar arquivo Fechar arquivo
1
2
3
4
![Page 8: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/8.jpg)
Arquivos Antes de realizar qualquer operação sobre
um arquivo, é necessário criar um identificador para o mesmo;
Isto feito, as ações passarão a ser direcionadas ao arquivo a partir deste identificador;
Na linguagem Pascal, o comando que associa um identificador à um arquivo físico é o assign, e ele pode ser usado da seguinte forma:
assign(arq_nome,‘C:\dados.dat');Onde arq_nome é o identificador, e o segundo parâmetro é o nome
físico do arquivo que será manipulado.
![Page 9: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/9.jpg)
Rotina : ASSIGN( )Função : Serve para associar um determinado Nome de arquivo, no disco ou disquete com o arquivo definido pelo programador.
Sintaxe : ASSIGN(Meu_Arquivo, STRING_Com_Nome_Arquivo_DOS).
Exemplo:PROGRAM TESTE;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING;Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;BEGIN
ASSIGN (Arq_nome, ’c:\dados.dat’);END.
Onde:
Arq_nome Nome Lógico do arquivo (aquele que será referenciado pelo programador na construção do seu código fonte
C:\ Diretório, ou caminho onde será armazenado o arquivo no disco
dados.dat Nome físico do arquivo que será manipulado
![Page 10: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/10.jpg)
Arquivos Abrindo um arquivo: é sempre necessário abrir um
arquivo para que se possa adicionar ou ler informações no/do mesmo;
Existem três formas de se abrir um arquivo:– rewrite;– reset;– append; (somente p/ texto)
Sintaxe:– Abrir um arquivonovo (inicializar);– Na linguagem Pascal, o comando rewrite é utilizado para abrir um arquivo
inicializando-o. Com o uso deste comando, se o arquivo não existir, o Turbo Pascal irá criá-lo. Se existir, seu conteúdo será destruído.
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); rewrite (arq_nome);End;
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); rewrite (arq_nome);End;
![Page 11: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/11.jpg)
Rotina : REWRITE( )Função : Cria e abre para E\S um arquivo. Caso o arquivo não exista, o mesmo será criado. Caso o arquivo já exista, todos os dados existentes nele serão apagados.
Sintaxe : REWRITE(Meu_Arquivo);Exemplo:
PROGRAM Teste;TYPE Registro = RECORD
Codigo : INTEGER; Nome : STRING; Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;BEGIN
ASSIGN (Arq_nome, ’c:\dados.dat’);REWRITE (Arq_nome);
END.
![Page 12: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/12.jpg)
Arquivos Abrir um arquivo já existente, sem
destruir seu conteúdo;– Na linguagem Pascal, o comando reset é utilizado
para abrir um arquivo preservando seu conteúdo pré-existente. Este comando é utilizado, principalmente, para abrir um arquivo para a leitura, pois ele posiciona o ponteiro do arquivo no primeiro registro gravado no mesmo.
• Uma tentativa de abrir um arquivo não existente com reset pode provocar um erro de E/S. Para solucionar isto, deve-se desativar a diretiva I do compilador com o comando {$I-}.
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); reset (arq_nome);End;
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); reset (arq_nome);End;
![Page 13: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/13.jpg)
Rotina : RESET( )Função : Abre para E/S um arquivo que já exista. Caso o arquivo não exista ocorrerá um erro de execução e o programa será abortado.
Sintaxe : RESET(Meu_Arquivo);
Exemplo:PROGRAM Teste;TYPE Registro = RECORD
Codigo : INTEGER; Nome : STRING; Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;BEGIN
ASSIGN (Arq_nome, ’c:\dados.dat’);RESET (Arq_nome);
END.
![Page 14: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/14.jpg)
Arquivos Abrir um arquivo texto já existente, sem
destruir seu conteúdo, preparando-o para gravar informações;– Na linguagem Pascal, o comando append é
utilizado para abrir um arquivo preservando seu conteúdo pré-existente. Este comando é utilizado, principalmente, para abrir um arquivo para a gravação de dados, pois ele posiciona o ponteiro no final do arquivo.
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); append (arq_nome);End;
Procedure Abrir;Begin assign(arq_nome,‘c:\dados.dat'); append (arq_nome);End;
![Page 15: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/15.jpg)
Arquivos Fechando um arquivo: é sempre necessário
fechar um arquivo após o seu uso, para não deixar o seu conteúdo exposto e nem comprometer a sua integridade;
Depois de fechado um arquivo, para utilizá-lo novamente basta abrí-lo (com rewrite, reset, ou append). Não é necessário associá-lo novamente a um arquivo físico com o comando assign;
Sintaxe:– Fechar umarquivo; Procedure Fechar;
Begin close (arq_nome);End;
Procedure Fechar;Begin close (arq_nome);End;
![Page 16: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/16.jpg)
Rotina : CLOSE( )Função : Fecha um arquivo que tenha sido aberto com RESET\REWRITE.
Sintaxe : CLSE(Meu_Arquivo);
Exemplo:PROGRAM Teste;TYPE Registro = RECORD
Codigo : INTEGER; Nome : STRING; Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;BEGIN
ASSIGN (Arq_nome, ’c:\dados.dat’);RESET (Arq_nome);CLOSE(Arq_nome)
END.
![Page 17: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/17.jpg)
Rotina : WRITE( )Função : A Rotina WRITE tem a mesma Função de saída de informações como até agora já tínhamos trabalhado, somente que ao invés da informação ser apresentada no vídeo, a mesma será armazenada em um arquivo.Sintaxe : WRITE (Meu_Arquivo, Registro)Exemplo:
PROGRAM Teste;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL;
END;VAR
Arq_Nome : FILE OF Registro;Reg : Registro;
BEGINASSIGN (Arq_nome ‘C:\Dados.Dat’);REWRITE (Arq_nome);CLRSCR;WRITE (‘Digite o Codigo: ‘);READLN (Reg.Codigo);WRITE (‘Digite o Nome: ‘);READLN (Reg.Nome);WRITE (‘Digite o Salario: ‘);READ LN(Reg.Salario);WRITE (Arq_nome, Reg);CLOSE (Arq_nome);
END.
![Page 18: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/18.jpg)
Rotina : READ( )Função : A Rotina READ tem a mesma Função de entrada de informações como até agora já tínhamos trabalhado, somente que ao invés da leitura ser feita pelo teclado, a mesma será feita de um arquivo.Sintaxe : READ (Meu_Arquivo, Registro)Exemplo:
PROGRAM Teste;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;Reg : Registro;
BEGINASSIGN (Arq_nome, ‘C:\Dados.Dat’);RESET (Arq_nome);READ (Arq_nome, Reg);
CLRSCR;WRITELN (‘Codigo = ‘, Reg.Codigo);WRITE LN(‘Nome = ‘, Reg.Nome);WRITELN(‘Salario = ‘,Reg.Salario:0:2);CLOSE (Arq_nome);
END. Observação: Após cada operação READ/WRITE no arquivo, o endereço do registro corrente no arquivo é incrementado em uma unidade. Assim por Exemplo, se o endereço do registro corrente é igual a 10, após uma operação de READ/WRITE, o registro corrente passará a ser o número 11.
![Page 19: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/19.jpg)
Rotina : FILEPOS( )Função : Retorna um número inteiro indicando qual o registro corrente em um arquivo.Sintaxe : Registro_Corrente : = FILEPOS (Meu_Arquivo)Exemplo:
PROGRAM Teste;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL; END;
VARArq_nome : FILE OF Registro;Corrente : INTEGER;
BEGINASSIGN (Arq_nome, ‘C:\Dados.Dat’);RESET (Arq_nome);Corrente : = FILEPOS(Arq_nome);
CLRSCR;WRITELN(Corrente);CLOSE (Arq_nome);
END.
![Page 20: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/20.jpg)
Rotina : FILESIZE( )Função : Retorna quantos registro existem armazenados no arquivo.Sintaxe : Tamanho_Arquivo : = FILESIZE (Meu_Arquivo)Exemplo:
PROGRAM Teste;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL; END;
VARArq_nome : FILE OF Registro;Total_reg : INTEGER;
BEGINASSIGN (Arq_nome, ‘C:\Dados.Dat’);RESET (Arq_nome);Total_reg : = FILESIZE (Arq_nome);
CLRSCR;WRITELN (Total_reg);CLOSE (Arq_nome);
END.
![Page 21: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/21.jpg)
Arquivos
Outros comandos para a manipulação de arquivo:– Seek(F,P);
• Move o ponteiro do arquivo F para o início do número de registro P;
– EOF(F);• Retorna verdadeiro se o ponteiro do arquivo F
estiver posicionado no final (último registro);
![Page 22: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/22.jpg)
Rotina : SEEK( )Função : Posiciona o ponteiro do arquivo em um registro determinado, para que o mesmo possa ser processado.Sintaxe : SEEK(Meu_Arquivo, Endereço_Registro)Exemplo:
PROGRAM Teste;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL;END;
VARArq_nome : FILE OF Registro;Reg : Registro;
BEGINASSIGN (Arq_nome, ‘c:\Dados.Dat’);RESET (Arq_nome);SEEK (Arq_nome, 10);READ (Arq_nome Reg);
CLRSCR;WRITELN(‘Codigo = ‘, Reg.Codigo);WRITELN (‘Nome = ‘, Reg.Nome);WRITELN (‘Salario = ‘, Reg.Salario:0:2);CLOSE (Arq_nome);
END.
Observação: O Comando SEEK, posicionará o cursor (Indicador de Registro) no registro fisico número 10;
![Page 23: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/23.jpg)
Rotina : EOF( )Função : Esta é uma função Booleana, que Retorna TRUE caso se alcance o final do arquivo, FALSE caso contrário.Sintaxe : Chegou_Final : = EOF (Meu_Arquivo)Exemplo:
PROGRAM Teste;USES CRT;TYPE
Registro = RECORD Codigo : INTEGER;
Nome : STRING; Salario : REAL;
END;VAR
Arq_nome : FILE OF Registro;Reg : Registro;
BEGINASSIGN (Arq_nome, ‘C:\Dados.Dat’);RESET (Arq_nome);WHILE NOT EOF(Arq_nome) DO BEGIN READ (Arq_nome, Reg);
CLRSCR; WRITELN(‘Codigo = ‘,Reg.Codigo); WRITELN(‘Nome = ‘, Reg.Nome); WRITE LN(‘Salario = ‘, Reg.Salario:0:2);
READKEY; END;CLOSE (Arq_nome);
END.
Observação: Neste exemplo será realizado a leitura do primeiro registro do arquivo até o final do arquivo, apresentando cada registro na tela;A instrução WHILE NOT EOF(Arq_nome) DO quer dizer, Faça enquanto NAO FOR O FINAL DO ARQUIVO.
![Page 24: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/24.jpg)
Diretivas de Erros Pascal
O Turbo Pascal possui diretivas de compilação para ativação/desativação da verificação automática de erros, permitindo que o código do erro possa ser identificado com a função IOResult.
{$I-} Desativa a verificação automática de erros{$I+} Ativa a verificação automática de erros
Quando for utilizada a diretiva {$I-}, o programa não
será abortado quando uma operação de Entrada/Saída não for bem sucedida.
Se a operação for bem sucedida a função IOResult retorna 0, do contrário retorna o código do erro (Ver exemplo a seguir).
![Page 25: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/25.jpg)
Controlar a Abertura de um Arquivo Rotina para abertura de arquivo:
Procedure abre_arq (nome: string);Begin
Assign (arq_nome, ‘c:\dados.dat’);{$I-}Reset (arq_nome);{$I+}If Ioresult <>0 then
begin Rewrite (arq_nome); end;End;
OBSERVAÇAO: A variável IORESULT é uma variável de ambiente, ela armazena o código do erro, após uma operação em um Arquivo Pascal;Se IORESULT for igual a Zero quer dizer que nao deu erro, qualquer valor Diferente de Zero, representa um erro que deve ser consultada na tabela de erros do PASCAL
![Page 26: Algoritmos e Estruturas de Dados II](https://reader035.vdocuments.pub/reader035/viewer/2022062301/56815286550346895dc0ad96/html5/thumbnails/26.jpg)
Algoritmos e Estruturas de Dados II
ARQUIVOS
Rodney Carneiro