Manipulação de Arquivos em Pascal



Documentos relacionados
Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

ARQUIVOS. Os arquivos criados em meios magnéticos poderão ser acessados para leitura e escrita na forma seqüencial, direta ou indexada.

10) REGISTROS : Exemplos: var N,I: integer; A,B,C: real; CHAVE: boolean; CARAC: char; V: array[1..20] of real; M: array[1..10,1..

Linguagem de Programação

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

PROG. DE COMPUTADORES II SI Arquivos

Variáveis Compostas Heterogêneas. Variável Composta Heterogênea. Variável Composta Heterogênea

Representação de Algoritmos - Linguagens de Programação

MANIPULAÇÃO DE STRINGS

1) Digitar o código-fonte no editor do compilador Turbo Pascal para windows, exatamente como apresentado a seguir:

Algumas notas sobre PASCAL

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

Recuperação de Chave Secundária e Multilista

ESTRUTURA DE DADOS -VARIÁVEIS COMPOSTAS. Prof. Angelo Augusto Frozza, M.Sc.

1 Funções básicas de implementação de arquivos

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

PROGRAMAÇÃO II 3. FILA DINÂMICA

Lista de Comandos: Arquivo texto e Binário

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

UNIP UNIVERSIDADE PAULISTA INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA (ICET) CURSO DE CIÊNCIAS DA COMPUTAÇÃO. O Paradigma da Orientação a Objeto

Adicionando Propriedades e Funcionalidades aos Componentes Parte II

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos,

Tutorial de Turbo Pascal

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Capítulo 12. SUB-ROTINAS

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

Programação de Computadores I. Linguagem C Arquivos

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Primeiros passos das Planilhas de Obra v2.6

Guia do Usuário. idocs Content Server v

compreender a importância de cada estrutura de controle disponível na Linguagem C;

II. LÓGICA DE PROGRAMAÇÃO COM PASCAL

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

ACESSANDO A PÁGINA DO CADASTRO DE DEPÓSITOS

Capítulo 15. INICIALIZAÇÃO, TEMPO DE CPU E DOS

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

PROGRAMAÇÃO II 3. PILHA DINÂMICA

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

CURSO de CIÊNCIA DA COMPUTAÇÃO - Gabarito

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Comandos de repetição while

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO CADASTRO DE FUNCIONÁRIOS

Capítulo 13 Pastas e Arquivos

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Treinamento SIGES. Índice

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

MANUAL SISTEMA AJG/CJF

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

A estrutura de repetição em um algoritmo consiste na execução de um trecho do mesmo levando em consideração certas condições imposta pelo algoritmo.

Plano de Aula - Access cód Horas/Aula

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Informática básica Telecentro/Infocentro Acessa-SP

Trabalho 3: Agenda de Tarefas

MANUAL - CONTABILIDADE

ERP-8115 Nota Fiscal Eletrônica v2.0 (XML) Erro "Elemento inválido" emitido pelo sistema na transmissão da Nota Fiscal Eletrônica.

O Gerenciamento de Documentos Analógico/Digital

MANUAL DA SECRETARIA

PROGRAMAÇÃO II 4. ÁRVORE

Manual de Utilização do PDV Klavix

Testes Baseados na Implementação. (fluxo de controle) Baseado em notas de aula da profa. Eliane Martins

Manual do Usuário. Declaração de Substituição Tributária, Diferencial de Alíquota e Antecipação - DeSTDA

AULA 16 - Sistema de Arquivos

Algumas notas sobre PASCAL

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

Apostilas OBJETIVA Atendente Comercial / Carteiro / Op. Triagem e Transbordo CORREIOS - Concurso Público º CADERNO. Índice

INTRODUÇÃO À LINGUAGEM C++

Estruturas de Dados Aula 15: Árvores 17/05/2011

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Sistemas Operacionais. Prof. André Y. Kusumoto

Analisando e comparando as funções do DBNavegator

Nome do Processo: Recebimento de produtos em consignação

Laboratório de Banco de Dados II Aula 1. Stored Procedures

Linguagens de Programação

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

DIAGRAMA DE ATIVIDADES

Modem e rede local. Guia do usuário

DESENVOLVIMENTO DE SOFTWARE

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Manual de Instalação Malote Eletrônico Banrisul

Um retrospecto da aula passada... Um retrospecto da aula passada... Principais Aspectos de Sistemas Operacionais. Gerência de E/S

Laboratório de Programação I

Tratamento de Exceções. Alberto Costa Neto DComp - UFS

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

Transcrição:

Manipulação de Arquivos em Pascal Estrutura de Dados II Aula 03 UFS - DComp Adaptados a partir do material da Profa. Kenia Kodel Cox 1

Para implementar programa infantil para ordenação (alfabética) de palavras, que estrutura de dados você usaria? Por quê? 2

Considerando a base de dados abaixo, referente à tabela de preços de uma papelaria, que estrutura de dados você usaria para mantê-la? 3

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.

Declaração de Arquivos em Pascal Do 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.

Aplicação de Arquivos Considerando, por exemplo: A necessidade de cadastrar os pacientes a serem atendidos por um médico; Sendo que as consultas são marcadas com meses de antecedência. Para cadastro dos dados dos pacientes, um array de registros poderia ser usado?

Aplicação de Arquivos Possí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.

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... N ArqPacientes Nome Convênio Fone Pago Retorno Maria BoaSaude 322 18,50 true

Associação a Nome Externo Para gerenciamento dos dados mantidos em arquivos, são necessários comandos específicos; de manipulação de arquivos. 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.

Associação a Nome Externo Atravé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

Associação a Nome Externo Exemplo: 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.

Associação a Nome Externo Exemplo: 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:\HospitalDaSaude\ DrCuraTudo\Consultas.dat

Abrindo Arquivos Para manipulação de dados mantidos em arquivos é preciso abri-los. 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.

Abrindo Arquivos Como já dito, tem-se: reset(var <Arquivo>); rewrite(var <Arquivo>); 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.

Abrindo Arquivos reset(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.

Abrindo Arquivos reset(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.

Abrindo Arquivos reset(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.

Abrindo Arquivos procedure 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.

Abrindo Arquivos procedure 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.

Abrindo Arquivos procedure AbrirArquivo(Arquivo: TipoArquivo; begin assign(arquivo,nomearq); {$I-} reset(arquivo); {$I+} if IOResult <> 0 then rewrite(arquivo); NomeArq: string); 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).

Fechando Arquivos close(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 efetuado ao final da manipulação deste e uma única vez. Assim, também, não deve ser mantido em laços de operações.

Lendo e Gravando Dados em Arquivos Para 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.

Lendo e Gravando Dados em Arquivos Para 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 é ajustado para a posição zero deste. Havendo leituras (read) ou gravações (write), esta operação é efetuada sobre o registros que se encontra na posição corrente e o apontador é atualizado em uma posição.

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.

Manipulando Arquivos Caso seja necessário manipular um registro que se encontra numa dada posição do arquivo, é útil o 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.

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.

Utilizando Arquivos Arquivos devem ser utilizados 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.

ARQUIVOS aplicação Implementar programa de cadastro dos medicamentos de uma farmácia.

CADASTRO FARMÁCIA dados type 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;

begin CadastroVazio:=false; assign(arqfarma,'farmas.dat'); {$I-} reset(arqfarma); {$I+} 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. CADASTRO FARMÁCIA principal

CADASTRO FARMÁCIA principal procedure 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;

CADASTRO FARMÁCIA procedure incluir; inclusão var R: char; begin 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;

CADASTRO FARMÁCIA consulta total procedure 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;

procedure consultar; var Remedio: Str20; 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 CADASTRO FARMÁCIA consulta 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 consulta procedure 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; Por que continuar a busca mesmo já tendo localizado o elemento desejado?

ARQUIVOS exercícios 1. Implementar procedimento de exclusão (lógica). 2. Ajustar procedimento de inclusão de forma a evitar redundância de dados. 3. Implementar procedimento de alteração (ajuste do estoque).

Verifique Vazio ARQUIVOS exercícios Consulta Total Inclusão Cadastro Farmácia [Principal] Consulta Exclusão Alteração Analisando a situação problema, que outras alterações (edições) são provavelmente necessárias?

Verifique Vazio? ARQUIVOS exercícios Consulta Total? Inclusão? Controle de Notas [Principal] Consulta? Exclusão? Alteração? Criar programa Pascal para manter as notas dos alunos da turma de Programação Imperativa: 3 notas (de 0 a 10).

ARQUIVOS COMPLEMENTAR ESTUDOS: Fundamentos da Programação de Computadores Ana Fernanda Gomes Ascencio Edilene Aparecida Veneruchi de Campos Capítulo Arquivo 39