Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquivos: Definic¸a˜o e Func¸o˜es em C Professor: Silvio Luiz Bragatto Boss e-mail: silvioboss@utfpr.edu.br Universidade Tecnolo´gica Federal do Parana´ - UTFPR Coordenac¸a˜o de Informa´tica - COINF Curso de Engenharia de Computac¸a˜o Disciplina de Estrutura de Dados I Arquivos Suma´rio 1 Arquivos Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Tipos de Arquivos Podemos dividir os arquivos em 2 tipos: Arquivos Texto e arquivos bina´rios. Arquivos Texto sa˜o arquivos que na˜o possuem um formato definido, sendo composto apenas por sequencias de bytes. Podemos ler e escrever sequencias de bytes em arquivos de forma semelhante a ler strings do teclado e escrever strings na tela. Caso seja armazenado um valor ex: 1234567 esse nu´mero gastara´ 7 bytes pois cada um de seus d´ıgitos e´ representado como um caractere. Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Tipos de Arquivos Arquivos bina´rios sa˜o arquivos que possuem uma estrutura definida atrave´s de um typedef ou struct e podemos ler ou gravar elementos com estas estruturas. Podemos tambe´m gravar o valor de varia´veis int, float, double, etc. Caso seja armazenado o valor de nu´mero inteiro 1234567 esse nu´mero (que e´ um inteiro de 32 bits) gastara´ 4 bytes de espac¸o pois um inteiro ocupa 4 bytes. Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Tipos de Arquivos Arquivos bina´rios sa˜o arquivos que possuem uma estrutura definida atrave´s de um typedef ou struct e podemos ler ou gravar elementos com estas estruturas. Podemos tambe´m gravar o valor de varia´veis int, float, double, etc. Caso seja armazenado o valor de nu´mero inteiro 1234567 esse nu´mero (que e´ um inteiro de 32 bits) gastara´ 4 bytes de espac¸o pois um inteiro ocupa 4 bytes. O Foco dessa aula sera´ sob manipulac¸a˜o de arquivos bina´rios Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Existem 3 formas de acessar arquivos: Sequencial: Os registros sa˜o lidos em sequencia, um apo´s o outro. A cada registro lido o indicador de posic¸a˜o de arquivo e´ avanc¸ado para que a pro´xima leitura ocorra iniciando naquele ponto. Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Existem 3 formas de acessar arquivos: Sequencial: Os registros sa˜o lidos em sequencia, um apo´s o outro. A cada registro lido o indicador de posic¸a˜o de arquivo e´ avanc¸ado para que a pro´xima leitura ocorra iniciando naquele ponto. Direto: Pode-se acessar qualquer posic¸a˜o do arquivo, para tanto e´ preciso ajustar o indicador de posic¸a˜o do arquivo para onde deseja-se realizar uma operac¸a˜o de leitura/escrita. Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Existem 3 formas de acessar arquivos: Indexado: O modo indexado e´ implementando em C usando as operac¸o˜es do modo de acesso direto. Vamos imaginar um arquivo de dados (agenda telefoˆnica) com 1000 registros de pessoas. Cada registro desses esta´ localizado numa posic¸a˜o do arquivo. Agora, cria-se um arquivo auxiliar (chamado de arquivo de ı´ndices). Este arquivo de ı´ndices armazena um dos campos do arquivo de dados (por exemplo o campo nome) e um campo posic¸a˜o que informa qual a posic¸a˜o do registro daquela pessoa no arquivo de dados. Veja a figura no slide seguinte. Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo O arquivo de ı´ndices e´ menor do que o arquivo de dados e pode ser lido na sua totalidade e armazenado em memo´ria sob a forma de uma tabela hash ou outra estrutura de dados que permita uma pesquisa ra´pida. Para criar uma operac¸a˜o de busca de uma pessoa na agenda, basta realizar a busca na tabela hash ou diretamente sobre o arquivo de ı´ndices, encontrar a posic¸a˜o do registro desejado no arquivo. Em posse da posic¸a˜o do registro no arquivo, realiza-se um ajuste do indicador de posic¸a˜o usando a func¸a˜o fseek. Por exemplo, para acessar o registro da Ana Lucia basta acessar o arquivo de indices e obter que o registro esta´ na posic¸a˜o 192 e depois fseek(ID_Arq_DADOS,192,SEEK_SET) e depois fread(&destino,sizeof(struct tipo_reg),1,ID_Arq_DADOS); Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo fopen () Abre um arquivo fclose() Fecha um arquivo fputc() e fputs() Escreve um caractere e uma string no arquivo fgetc() e fgets() Leˆ um caractere e uma string de um arquivo fseek() Posiciona o arquivo em um byte espec´ıfico fprintf() E´ para um arquivo o que printf() e´ para o console fscanf() E´ para um arquivo o que scanf() e´ para o console Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo feof() Verdadeiro se o fim de arquivo for encontrado ferror() Verdadeiro se ocorreu um erro rewind() Recoloca o ponteiro de registro (indicador de posic¸a˜o) no in´ıcio do arquivo remove() Apaga um arquivo fflush() Descarrega um arquivo fread() Leˆ sequencia de bytes de arquivo fwrite() escreve sequencia de bytes em arquivo ftell () Obte´m a posic¸a˜o atual no arquivo Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Programas fonte em C para estudo Estude o programa fonte cria_agenda.c. Este programa e´ responsa´vel pela criac¸a˜o de um arquivo DADOS.DAD com registros de alunos, no total sa˜o inseridos 5 registros. Cada registro possui os seguintes campos: typedef struct { char nome[30]; char endereco[30]; int idade; int CPF; int RG; int matricula_universidade; char nome_pai[30]; char nome_mae[30]; char email[30]; }Tipo_Registro; Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Agora: estude o programa fonte mostra_agenda.c. Este programa mostra na tela todo o conteu´do do banco de dados (mostra apenas o nome e email) [0]Nome:Maria da silva Email:maria@nanana.dd.dd [1]Nome:Joao Paulo Email:joao@universidade.dd.dd [2]Nome:Naiara Martins Email:naiara@universidade.dd.dd [3]Nome:Rodrigo Cambara Email:rodrigo@universidade.dd.dd [4]Nome:Juvenal terra Email:juvenal@universidade.dd.dd Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX Arquivos Arquivo Estude os programas fontes dispon´ıvel no Moodle binario.c le_binario.c Silvio Luiz Bragatto Boss UTFPR Arquivos LATEX
Compartilhar