1 / 26

Algoritmos e Estruturas de Dados II

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;

jara
Download Presentation

Algoritmos e Estruturas de Dados II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmos e Estruturas de Dados II ARQUIVOS Rodney Carneiro

  2. 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;

  3. Arquivo Registros Registros Registros Disco ... Campos Campos Campos ... ... ... Campos Campos Campos 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)

  4. 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;

  5. Estrutura Física de um Arquivo • Quando 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.

  6. 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;

  7. Consultar arquivo Acrescentar arquivo 1 2 3 4 Abrir arquivo Abrir arquivo Achar item procurado Achar posição da inserção Copiar informações Gravar informações Fechar arquivo Fechar arquivo 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:

  8. 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.

  9. 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:

  10. 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 arquivo novo (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;

  11. 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.

  12. 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;

  13. 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.

  14. 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;

  15. 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 um arquivo; Procedure Fechar; Begin close (arq_nome); End;

  16. 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.

  17. 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; BEGIN ASSIGN (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.

  18. 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; BEGIN ASSIGN (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.

  19. 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; VAR Arq_nome : FILE OF Registro; Corrente : INTEGER; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); Corrente : = FILEPOS(Arq_nome); CLRSCR; WRITELN(Corrente); CLOSE (Arq_nome); END.

  20. 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; VAR Arq_nome : FILE OF Registro; Total_reg : INTEGER; BEGIN ASSIGN (Arq_nome, ‘C:\Dados.Dat’); RESET (Arq_nome); Total_reg : = FILESIZE (Arq_nome); CLRSCR; WRITELN (Total_reg); CLOSE (Arq_nome); END.

  21. 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);

  22. 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; VAR Arq_nome : FILE OF Registro; Reg : Registro; BEGIN ASSIGN (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;

  23. 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; BEGIN ASSIGN (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.

  24. 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).

  25. 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

  26. Algoritmos e Estruturas de Dados II ARQUIVOS Rodney Carneiro

More Related