EDII03 [2012.1]  Manipulação de Arquivos em Pascal
Upcoming SlideShare
Loading in...5
×
 

EDII03 [2012.1] Manipulação de Arquivos em Pascal

on

  • 1,592 views

 

Statistics

Views

Total Views
1,592
Views on SlideShare
1,592
Embed Views
0

Actions

Likes
0
Downloads
30
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

EDII03 [2012.1]  Manipulação de Arquivos em Pascal EDII03 [2012.1] Manipulação de Arquivos em Pascal Presentation Transcript

  • Manipulação deArquivos em Pascal Estrutura de Dados IIUnida 3 de UFS - DCOMP - Prof. Kenia 1 Kodel
  • Flores?O verbo educar é originário do latim e querdizer extrair de dentro. Logo, a educaçãonão se constitui em mero estabelecimento deinformações, mas sim de se trabalhar aspotencialidades do ser, a fim de quefloresçam. UFS - DCOMP - Prof. Kenia 2 Kodel
  • O segredo é não correr atrás dasborboletas... É cuidar do jardimpara que elas venham até você. . Mário Quintana UFS - DCOMP - Prof. Kenia 3 Kodel
  • ara implementar programa infantil para ordenação (alfabética) de palavras, que estrutura de dados você usaria? Por quê?UFS - DCOMP - Prof. Kenia 4 Kodel
  • Considerando a base de dados abaixo, referente à tabela de preços de uma papelaria, que estrutura de dados você usaria para mantê-la?UFS - DCOMP - Prof. Kenia 5 Kodel
  • Definição de Arquivos Os arquivos são elementos de armazenamento de dados residentes em memória secundária, ou seja, memória não volátil. Portanto são diferentes dos outros itens de armazenamento de dados (residentes na memória principal): registros, vetores, matrizes; os quais não preservam os dados neles depositados, após o término da execução dos programas que os definem. UFS - DCOMP - Prof. Kenia 6 Kodel
  • Declaração Pascal de ArquivosDo ponto de vista lógico, os arquivos são coleções de registros e são declarados:var <Nome>: file of <TipoRegistro>;Onde:o Nome – nome do arquivo (interno);o TipoRegistro – tipo dos registros que comporão o arquivo. UFS - DCOMP - Prof. Kenia 7 Kodel
  • Aplicação de ArquivosConsiderando, por exemplo, a necessidade de cadastrar os pacientes a serem atendidos por um médico; onde as Paaca sto dos da dos r da r dos consultas são marcadas com pa es, um array de r r cient egistos poder serusa ia do? antecedência de meses. UFS - DCOMP - Prof. Kenia 8 Kodel
  • Aplicação de ArquivosPossível solução:type TpRegMed = record Nome: string[20]; Convenio, Fone: string[10]; Pago: real; Retorno: boolean; end;var ArqPacientes: file of TpRegMed;Considerando a definição dada, nesta temos que ArqPacientes é um arquivo composto por registros formados por cinco campos: nome, convênio, fone, (valor) pago e retorno. UFS - DCOMP - Prof. Kenia 9 Kodel
  • type TpRegMed = record Nome: string[20]; Convenio, Fone: string[10]; Pago: real; Retorno: boolean; end;var ArqPacientes: file of TpRegMed; 0 ≡ 1 2 ≡ ≡ ≡ 3 ≡ 4 ≡ 5 ≡ 6 ≡ 7 ≡ Nome Convênio Fone Pago Retorno ... Maria BoaSaude 322 18,50 true N ≡ ArqPacientes UFS - DCOMP - Prof. Kenia 10 Kodel
  • Associação a Nome Externo Para gerenciamento dos dados mantidos em arquivos, são necessários comandos específicos; de manipulação de arquivos. Um destes refere-se à associação a nome externo. O assign é o procedimento que possibilita a associação do nome externo do arquivo ao seu nome lógico (interno). Os arquivos são elementos que existem independente da existência do programa que o manipula. Portanto, apresentam nome externo, através do qual, por exemplo, outros programas os identificam. UFS - DCOMP - Prof. Kenia 11 Kodel
  • Associação a Nome ExternoAtravés do nome externo o arquivo mantém-se disponível para outros programas.assign(var <arqinterno>; <arqexterno>: string);Onde: <arqinterno> é o nome lógico do arquivo, nome interno <arqexterno> é o nome externo do arquivo UFS - DCOMP - Prof. Kenia 12 Kodel
  • Associação a Nome ExternoExemplo:assign(ArqPacientes,‘Consultas.dat’); Com a execução do programa que manipula ArqPacientes, considerando os efeitos da instrução dada acima, o arquivo Consultas.dat externo, é associado ao arquivo interno ArqPacientes. Mesmo após a conclusão do referido programa, o arquivo Consultas.dat existirá, preservando os dados neste mantidos. UFS - DCOMP - Prof. Kenia 13 Kodel
  • Associação a Nome ExternoExemplo:assign(ArqPacientes,‘C18nov08.dat’);...assign(ArqPacientes,‘C20nov08.dat’); Um único arquivo lógico pode ser associado a diversos arquivos externos (um por vez), dependendo da situação problema a ser solucionada. Antes da definição do nome externo do arquivo pode ser descrito o caminho de localização deste: ‘C:Hospital DaSaude DrCuraTudoConsultas.dat’ UFS - DCOMP - Prof. Kenia 14 Kodel
  • Abrindo Arquivos Para manipulação de dados mantidos em arquivos é preciso abir estes (arquivos). Em Pascal há dois comandos para abrir arquivos:reset(var <Arquivo>);rewrite(var <Arquivo>); O reset é um procedimento útil para abrir arquivos já existentes. Preserva os dados mantidos neste. Com o reset, caso o arquivo não exista, ocorre um erro de execução. UFS - DCOMP - Prof. Kenia 15 Kodel
  • Abrindo Arquivos Como já dito, tem-se:reset(var <Arquivo>);rewrite(var <Arquivo>); As características do reset já foram vistas. O rewrite é um procedimento útil para criar e abrir novos arquivos. Caso o arquivo já exista, o rewrite provoca a perda dos dados mantidos neste. UFS - DCOMP - Prof. Kenia 16 Kodel
  • Abrindo Arquivosreset(ArqPacientes);rewrite(ArqPacientes); Na prática, se usamos apenas o reset para abrir os arquivos manipulados por um programa; na primeira vez que o usuário executar a aplicação, como o cadastro não existe, o reset provocaria erro de execução. UFS - DCOMP - Prof. Kenia 17 Kodel
  • Abrindo Arquivosreset(ArqPacientes);rewrite(ArqPacientes); E se usamos, na prática, apenas o rewrite, para abrir os arquivos manipulados por um programa; a primeira vez que o usuário executar a aplicação, como o cadastro não existe, o rewrite provoca a criação do arquivo; mas em todas as outras vezes, que o arquivo (cadastro) deve apenas ser aberto, o rewrite, provoca a perda dos dados. UFS - DCOMP - Prof. Kenia 18 Kodel
  • Abrindo Arquivosreset(ArqPacientes);rewrite(ArqPacientes); Precisamos então: sendo a primeira vez que o usuário está executando o programa (o cadastro ainda não existe), o rewrite deve ser usado para criar o arquivo. E, em todas as outras vezes (o cadastro já existe e deve ser preservado) usar o reset. UFS - DCOMP - Prof. Kenia 19 Kodel
  • Abrindo Arquivosprocedure AbrirArquivo(Arquivo: TipoArquivo; NomeArq: string);begin assign(Arquivo,NomeArq); {$I-} reset(Arquivo); {$I+} if IOResult <> 0 then rewrite(Arquivo);end; Neste tenta-se abrir o arquivo com reset, presumindo que o Arquivo já exista. Caso o arquivo não exista, com {$I-} é efetuado o desligamento da diretiva de compilação fazendo com que o erro não seja tratado através de mensagem ao usuário, mas que seja atribuído um código de erro à variável predefinida IOResult. UFS - DCOMP - Prof. Kenia 20 Kodel
  • Abrindo Arquivosprocedure AbrirArquivo(Arquivo: TipoArquivo; NomeArq: string);begin assign(Arquivo,NomeArq); {$I-} reset(Arquivo); {$I+} if IOResult <> 0 then rewrite(Arquivo);end; Se a IOResult for diferente de zero é porque houve erro na tentativa de abrir o arquivo. Se houve erro é porque o arquivo não existia, então este deve ser criado – usando o rewrite. Se a IOResult for igual a zero é porque não houve erro na tentativa de abrir o arquivo. Ou seja, o arquivo já existia e foi devidamente aberto com reset. Neste caso o rewrite não precisa ser usado. UFS - DCOMP - Prof. Kenia 21 Kodel
  • Abrindo Arquivosprocedure AbrirArquivo(Arquivo: TipoArquivo; NomeArq: string);begin assign(Arquivo,NomeArq); {$I-} reset(Arquivo); {$I+} if IOResult <> 0 then rewrite(Arquivo);end; Importante destacar que a abertura de um arquivo requer a associação prévia deste a um nome externo. Em aplicações que manipulam arquivo, a abertura deste deve ser efetuada no início da aplicação, e uma única vez, não deve ser feita então, por exemplo, em laços (de operações). UFS - DCOMP - Prof. Kenia 22 Kodel
  • Fechando Arquivosclose(var <Arquivo>); Através do comando close é possível fechar um arquivo. Vale esclarecer que a ausência do close não é identificada nem no processo de compilação, nem no de execução . Porém pode provocar danos nos dados mantidos no arquivo. O processo de fechar um arquivo deve ser efetuada ao final da manipulação deste e uma única vez. Assim, também, não deve ser mantido em laços de operações. UFS - DCOMP - Prof. Kenia 23 Kodel
  • Lendo e Gravando Dados em ArquivosPara armazenamento, usar:write(var <Arquivo>,<Registro>);Para leitura, usar:read(var <Arquivo>,var <Registro>); Exemplo, a instrução write(Arq,R); provoca o armazenamento do registro R no arquivo Arq. Mas, resta esclarecer em que posição. O read e o write são aplicados ao registro da posição corrente do arquivo. Para gerenciamento de um arquivo é mantido um ponteiro numérico que indica a posição (corrente) do registro a ser manipulado. UFS - DCOMP - Prof. Kenia 24 Kodel
  • Lendo e Gravando Dados em ArquivosPara armazenamento, usar:write(var <Arquivo>,<Registro>);Para leitura, usar:read(var <Arquivo>,var <Registro>);• Inicialmente, logo após a abertura de um arquivo, o ponteiro lógico é setado na posição zero deste.• Havendo leituras (read) ou gravações (write), esta operação é efetuada sobre o registros que encontra- se na posição corrente e o apontador é atualizado em uma posição. UFS - DCOMP - Prof. Kenia 25 Kodel
  • Manipulando Arquivos Em geral, no processo de inclusão de novos registros, estes devem ser adicionados ao final do arquivo, após o último registro. Para tanto, é útil a função eof.eof(<Arquivo>):boolean; eof é uma função que retorna true quando é encontrado o fim do arquivo. UFS - DCOMP - Prof. Kenia 26 Kodel
  • Manipulando Arquivos Caso seja necessário manipular um registro que encontra-se numa dada posição do arquivo, é útil procedimento seek.seek(var <Arquivo>; <posição>: longint); Considerando seek(Arq,50); o ponteiro é posicionado na posição 50 do arquivo Arq; então a próxima operação de leitura ou armazenamento será efetuada sobre o registro que se encontra nesta posição. UFS - DCOMP - Prof. Kenia 27 Kodel
  • Manipulando Arquivos Para identificar em que posição se encontra o ponteiro de um arquivo há a função filepos.filepos(<Arquivo>):longint; E para identificar quantos registros compõem o arquivo é útil a função filesize.filesize(<Arquivo>): longint; Vale esclarecer que o número de registros que compõem um arquivo também é denominado tamanho do arquivo. UFS - DCOMP - Prof. Kenia 28 Kodel
  • Aplicando Arquivos Arquivos devem ser aplicados em aplicações computacionais que manipulam dados que devem ser mantidos permanentemente: agenda telefônica, estoque, cadastros. Vale considerar que a memória permanente tem também grande capacidade de armazenamento de dados, mas é lenta em relação à memória principal. UFS - DCOMP - Prof. Kenia 29 Kodel
  • ARQUIVOS aplicação Implementar programa de cadastro dos medicamentos de uma farmácia.UFS - DCOMP - Prof. Kenia 30 Kodel
  • CADASTRO FARMÁCIA dadostype Str20 = string[20]; TpReg = record Nome: Str20; Preco: real; Estoque: integer; {Quantidade em estoque} end;var ArqFarma: file of TpReg; RegFarma: TpReg; Opcao: char; CadastroVazio, Existe: boolean; Pos: longint; UFS - DCOMP - Prof. Kenia 31 Kodel
  • begin CadastroVazio:=false; CADASTRO FARMÁCIA assign(ArqFarma,Farmas.dat); {$I-} reset(ArqFarma); {$I+} principal if IOResult <> 0 then rewrite(ArqFarma); repeat clrscr; writeln(*** farma ***); writeln; writeln( 1 - incluir); writeln( 2 - excluir); writeln( 3 - editar estoque); writeln( 4 - consultar); writeln( 5 - listar todos); writeln( 6 - encerrar); writeln; writeln(Opcao:); repeat Opcao:=readkey; until Opcao in [1,2,3,4,5,6]; if Opcao in [2,3,4,5] then VerifiqueVazio(CadastroVazio); if not CadastroVazio then case Opcao of 1: incluir; 2: excluir; 3: alterar; 4: consultar; 5: listarTodos; end; until Opcao = 6; close(ArqFarma); end. UFS - DCOMP - Prof. Kenia 32 Kodel
  • CADASTRO FARMÁCIA principalprocedure VerifiqueVazio(var inicio: boolean);begin inicio:=false; if filesize(ArqFarma)=0 then begin inicio:=true; clrscr; writeln(impossivel realizar operação, cadastro vazio); writeln(pressione qualquer tecla); readln; end;end; UFS - DCOMP - Prof. Kenia 33 Kodel
  • procedure incluir;var CADASTRO FARMÁCIA R: char;begin inclusão repeat clrscr; writeln(*** inclusao ***); writeln; with RegFarma do begin writeln(Nome: ); readln(Nome); writeln(Preco: ); readln(Preco); writeln(Estoque: ); readln(Estoque); end; seek(ArqFarma,filesize(ArqFarma)); write(ArqFarma,RegFarma); writeln; writeln(Deseja efetuar nova inclusao? S/N ); repeat R:=upcase(readkey); until (R=S) or (R=N); until R=N;end; UFS - DCOMP - Prof. Kenia 34 Kodel
  • CADASTRO FARMÁCIA consulta totalprocedure listarTodos;begin clrscr; writeln(*** lista todos ***); writeln; writeln(Nome:20,Preco:12,Estoque:10); seek(ArqFarma,0); while not eof(ArqFarma) do begin read(ArqFarma,RegFarma); if RegFarma.Nome <> XXX then with RegFarma do writeln(Nome:20,Preco:10:2,Estoque:10); end; writeln; writeln(pressione qualquer tecla); readkey;end; UFS - DCOMP - Prof. Kenia 35 Kodel
  • procedure consultar; CADASTRO FARMÁCIAvar Remedio: Str20; consulta R: char;begin repeat clrscr; writeln(*** consulta ***); writeln; writeln(Nome: ); readln(Remedio); localizar(Remedio,Existe,Pos); if Existe then with RegFarma do begin writeln(Nome: ,Nome); writeln(Preco: ,Preco); writeln(Estoque: ,Estoque); end else writeln(*** medicamento inexistente ***); writeln; writeln(Deseja efetuar nova consulta? S/N ); repeat R:=upcase(readkey); until (R=S) or (R=N); until R = N;end;
  • CADASTRO FARMÁCIA consultaprocedure localizar(N: Str20; var Achou: boolean; var Posicao: longint);begin Achou:=false; Posicao:=-1; seek(ArqFarma,0); while not eof(ArqFarma) do begin read(ArqFarma,RegFarma); if RegFarma.Nome = N then begin Achou:=true; Posicao:=filepos(ArqFarma)-1; end; end;end; inua á endo ocaiza Porque cont rabuscamesmo j t l l do o el o desej do? ement a UFS - DCOMP - Prof. Kenia 37 Kodel
  • ARQUIVOS aplicação Implementar procedimento de exclusão (lógica).UFS - DCOMP - Prof. Kenia 38 Kodel
  • procedure incluir;var CADASTRO FARMÁCIA R: char;begin inclusão repeat clrscr; writeln(*** inclusao ***); j a pr ust r ocediment de o writeln; incl ã de for aev a us o ma it r with RegFarma do begin writeln(Nome: ); r â de da edund ncia dos. readln(Nome); writeln(Preco: ); readln(Preco); writeln(Estoque: ); readln(Estoque); end; seek(ArqFarma,filesize(ArqFarma)); write(ArqFarma,RegFarma); writeln; writeln(Deseja efetuar nova inclusao? S/N ); repeat R:=upcase(readkey); until (R=S) or (R=N); until R=N;end;
  • ARQUIVOS aplicação Implementar procedimento de alteração (ajuste do estoque).UFS - DCOMP - Prof. Kenia 40 Kodel
  • ARQUIVOS aplicação Analisando a situação problema, que outras alterações (edições) são provavelmente necessárias?UFS - DCOMP - Prof. Kenia 41 Kodel
  • ARQUIVOS exercício Criar programa Pascal para manter as notas dos alunos da turma de Programação Imperativa: 3 notas (de 0 a 10).UFS - DCOMP - Prof. Kenia 42 Kodel
  • ARQUIVOS exercícioCriar trecho de código Pascal para manter o ranking de um jogo. Neste são mantidos nome do jogador e pontuação (o que também corresponde à entrada). Um nome não pode aparecer mais de uma vez no jogo. O ranking é composto por até 5 jogadores. UFS - DCOMP - Prof. Kenia 43 Kodel
  • Propor situação problema cuja solução ótimarequer a aplicação de arquivos de dados.Construir programa correspondente.Disponibilizar as operações de: a) inclusão, b) consulta total, c) consulta por chave [lida]. C uidando do jardim!!! UFS - DCOMP - Prof. Kenia 44 Kodel
  • ARQUIVOS COMPLEMENTAR ESTUDOS:Fundamentos da Programação de Computadores Ana Fernanda Gomes Ascencio Edilene Aparecida Veneruchi de Campos Capítulo Arquivo 45 UFS - DCOMP - Prof. Kenia 45 Kodel