MC326 – Estutura de Arquivos Laboratório 02 – Versão 1 1 MC 326E- 1º Semestre 2007 Manipulação de arquivos com registros de tamanho fixo. Laboratório 2B, 2C,2D – Manipulação Arquivos Atualizado em:31/03/10 - Prof. Sindo 2 Objetivo • • • 3 Manipulação de arquivos com registros de tamanho fixo, campos de tamanho fixo e campos de tamanho variável. Evolução dos laboratórios anteriores para a construção de uma biblioteca de funções que permitam realizar as operações de pesquisa, alteração, remoção e inserção de registros e campos em um arquivo. Construção de funções para criação e pesquisa de índices; Estudo e Pesquisa Estude as seguintes funções • 4 fread(); fwrite(); feof(); Problema Suponha que a Unicamp mantém um arquivo com algumas informações dos seus alunos em arquivos de dados de tamanho fixo, conforme ilustrado na tabela TAB-1. Para cada registro são fornecidos: • o nome do campo • o tipo do campo (A- alfabético, X-alfanumérico, N – numérico inteiro, D- numérico decimal, M –moeda) • a posição inicial no registro • a posição final no registro • a obrigatoriedade da presença da informação (S – obrigatório, N – opcional) Outras características: ● • Arquivo do tipo texto cujos campos são de tamanho fixo. O final do arquivo é especificado pelo nome do Campo especial “FimRegistro”, normalmente colocado no final da tabela de descrição do registro do arquivo. Campos Alfanuméricos com tamanho inferior ao tamanho reservado, são preenchidos com “brancos” à direita; Descrição do arquivo de Entrada Nome do Campo RA NOME CIDADE TEL Contato TEL Aternativo Sexo Curso FimRegistro Tipo N X X X X A N X Posição Posição Obrigat Inicial Final ório? Mensagem para Usuário 1 6 S RA deve ter 6 digitos 8 31 S Nome deve ser fornecido 32 46 N 47 54 S Obrigatório 56 63 N 65 65 N F ou M 67 68 S Devem ser fornecidos 2 dígitos 69 69 S # TAB – 1 - Descrição do arquivo de entrada 5 1 0 0 0 2 9 9 8 3 2 4 2 4 3 9 0 5 7 1 7 Exemplo de um arquivo de entrada Na Tabela TAB-2 abaixo segue um exemplo de arquivo que satisfaz a descrição constante de TAB – 1. As 3 primeiras linhas não fazem parte do aquivo e foram adicionadas apenas como um cabeçalho apenas para identificar as posições (colunas) dentro do arquivo. 1 6 7 8 9 0 1 2 3 4 5 6 3 MA U R I C I O 0 L UCAS DE 0 MA G D A S I L 2 3 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 J O S E Z A MB O N I TAP MO R A E S B E R T O PI RA VA ARAP 6 7 EV CI OT 4 8 9 0 1 2 3 4 5 6 7 8 9 A 3 7 5 CABA 2 1 2 I 4 3 5 5 0 6 2 4 1 4 1 2 2 3 1 6 3 2 2 4 6 4 5 6 7 8 9 0 1 2 3 4 5 6 8 9 9 1 2 1 8 7 5 M 2 M 5 F TAB – 2 – Exemplo de arquivo de entrada 6 1.1 Funcionalidades do programa O programa deverá ser orientado por “cardápios” e deve ter, no mínimo, as seguintes opções: Opcão 1: Conversão do arquivo de formato fixo para formato variável Nesta opção baseado no arquivo de configuração do arquivo de dados, deve ser criado o arquivo no formato variável de acordo com o seguinte formato • • • O registro de saída deve conter os seis dígitos do RA, seguido do caractere separador “|”, seguido dos caracteres do NOME (removendo, se houver, os caracteres em branco ao final dos nomes), seguido do separador “ |” , e assim sucessivamente até o sétimo campo. Para campos nulos voce deve armazenar apenas o separador “|”. Ao final do registro armazenar o caractere definido no campo FIMREGISTRO. No caso acima esse caracter é “#” Após o caracter “#”, adicionar “pular de linha”. Para os 2 primeiros registros teremos a seguinte saída: 7 3 0 4 8 4 3 2 9 # # # 092373|MAURICIO JOSE ZAMBON|ITAPEVA|37564328|99121875|M|34# 094910|LUCAS DE MORAES BERTO|PIRACICABA|21221122||M|03# Ao final da conversão informe a quantidade de registros lidos, a quantidade de bytes do arquivo original e a quantidade de bytes do arquivo convertido. 1.2 Opcão 2: Listar o arquivo de dados no formato fixo Nesta opção deve ser mostrada uma lista dos registros do arquivo fixo com o objetivo de facilitar a visualização dos dados. Defina um formato de saída que tenha pelo menos o nome dos campos e o valor desses campos. Do arquivo de configuração, por exemplo, poderá ser extraído o nome do campo para mostrar os seu valor. Por exemplo, poderia ser uma Lista com NomeDoCampo=Valor. Voce pode sugerir uma outra formatação que considerar mais apropriada. Por exemplo, um formato HTML que poderia ser aberto por um navegador que já mostraria uma página bem bonita! 1.3 Opcão 3: Listar o arquivo de dados no formato variável Nesta opção deve ser mostrada uma lista dos registros do arquivo de dados variável. A lista deve conter todas as informações da estrutura definida no item 2. Com essa lista o usuário poderá acompanhar e “debugar” se o arquivo está no formato correto. Embora as informações dependam da estrutura escolhida no item 2, poderão ser úteis as seguintes informações: posição (byte) do arquivo onde inicia o registro; situação do registro (“removido” ou “válido”), tamanho, em bytes, do registro; campo, tamanho do campo, conteúdo do campo. 1.4 Opcão 4: Pesquisa de um determinado registro pela chave primária Nesta opção o programa deve pedir ao usuário o valor de uma chave primária e o programa deverá fazer uma pesquisa no arquivo de formato variável e mostrar: • Caso o registro exista, os dados do registro no mesmo formato de apresentação da opção 3 • Caso o registro não exista, mensagem “Registro Inexistente”; 1.5 Opcão 6: Extração das chaves Nesta opção o programa deverá criar um arquivo com a extração das chaves primárias e o endereço físico do registro no arquivo de dados. Este arquivo será utilizado para criar um arquivo de índices 1.6 Opcão 7: Classificação do arquivo das chaves Nesta opção o programa deverá criar um arquivo classificado com chaves primárias extraídas na Opção 6. (Esta opção é para ser bem simples. Utilize a função system para chamar o programa sort. Não deve ser implementado nenhum algoritmo de classificação). 1.7 Opcão 8: Listar o arquivo com a extração das chaves geradas na opçao 3.6 Este item tem que sair de graça! Basta ter projetado a opção 2 genérica o suficiente para ativá-la passando um nome de arquivo diferente e uma nova configuração... 1.8 Opcão 9: Listar o arquivo com a extração das chaves classificadas geradas no item 3.7 Se a opção 8 saiu de graça, esta nem conta na avaliação! 1.9 Opcão 10: Criar o arquivo de índices Nesta opção, você deverá criar o arquivo de índices para que possa ser pesquisado utilizando a técnica de pesquisa binária. Em disco! Sugestão: será que você já não pode considerar que ele foi criado em alguma opção anterior? 1.10 Opcão 11: Pesquisa utilizando o arquivo de índices Nesta opção o programa deve pedir ao usuário o valor de uma chave primária e o programa deverá fazer uma pesquisa no arquivo de índices utilizando pesquisa binária em disco e deverão ser mostrados: • Caso o registro exista, os dados do registro devem ser mostrados no mesmo formato de apresentação da opção 3 • Caso o registro não exista, mensagem “Registro Inexistente”; 1.11 Opcão 12: Remoção de um registro Nesta opção o programa deve pedir ao usuário o valor de uma chave primária e o programa deverá fazer uma pesquisa no arquivo de índices utilizando pesquisa binária em disco • Caso o registro exista, ele deverá ser excluído. • Caso o registro não exista, mensagem “Registro Inexistente” Cada grupo deve criar dois arquivos de entrada com os dados no formato definido acima. • • Um arquivo com 3 registros contendo todos os possíveis erros de entrada; Um outro arquivo com pelo menos 20 registros. 7 Exemplos de chamada do Programa 1. Lab02A <arq_entrada> <arq saída> 8 Testes 9 • Antes de codificar ou estruturar seu programa pense em arquivos de dados que possibilitem testar seu programa de uma maneira abrangente. • Você deve consistir os dados de entrada e fornecer mensagens de erro/aviso para orientar o usuário. • Os registros que apresentarem algum tipo de erro devem ser descartados. Prazo de entrega Será considerada como data de entrega a data de depósito dos fontes no Teleduc. Módulo Data entrega Valor Máximo do Laboratório Lab2A – até opção 3 12/04/2010(Segunda) 10 Lab2B- até opção 9 21/04/2010(Quarta) 10 Lab2C –até opção 12 30/04/2009(Sexta) 10 10 O que deve ser entregue? 11 Os programas e os arquivos utilizados nos testes. Questionamento: 1. Suponha que houve alterações no arquivo de entrada em relação às posições de inicio e fim de cada campo. Seu programa deverá ser concebido para facilitar essa alteração. 2. Faça seu programa para que o usuário possa trocar o caráter separador, por exemplo, de “|” por “@” . 3. No próximo laboratório você deverá ler os arquivos de saída que foram gerados neste laboratório para efetuar operações de pesquisa. Organize seu programa para reutilizar o código. 4. As rotinas de leitura de arquivo, gravação de arquivo devem estar definidas em bibliotecas separadas para serem reutilizadas nos próximos programas. 5. Embora na TAB-1 existam apenas 8 campos, seu programa deverá ser concebido para possibilitar que sejam definidos arquivos com um número maior de campos. 6. Ainda deve ser considerada a possibilidade de mudança de idioma. 12 Referências