Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Estruturada Prof.ª: Priscilla Abreu pbraz@unicarioca.edu.br Disciplina – Programação Estruturada Roteiro de aula: • Objetivo da aula – Arquivos • Conceito • Manipulação • Exercícios 2Algoritmos II MANIPULAÇÃO DE ARQUIVOS 3Programação Estruturada Introdução - Arquivos ̶ Até o momento: foco em manipulação de dados apenas na memória principal do computador; ̶ Arquivos: possibilidade de guardar os dados em memória secundária e manipulá-los posteriormente. 4Programação Estruturada Arquivos Coleção de bytes armazenados em dispositivos de memória secundária (disco rígido, pen drive, ...) que são referenciados através de nomes que os identificam. 5Programação Estruturada Manipulação de dados em um arquivo Acesso e manipulação de arquivos por meio de: ̶ Leitura e gravação de caracteres; ̶ Leitura e gravação de strings; ̶ Leitura e gravação de dados formatados; ̶ Leitura e gravação de blocos de informações estruturadas. 8Programação Estruturada Arquivo texto x arquivo binário ̶ Dois modos de acesso aos arquivos: modo texto e modo binário; ̶ Arquivos texto: interpretados como uma sequência de caracteres ASCII, que é agrupada em linhas, separadas pelo caractere ‘\n’. ̶ Arquivos binário: transferência de dados da forma como os dados são armazenados na memória do computador. 9Programação Estruturada Arquivo texto x arquivo binário ̶ Exemplo: Número 109751 armazenado em arquivo texto ocupa 5 bytes, já no modo binário ocupa 4 bytes. ̶ Arquivos texto ocupam mais espaço do que arquivos binários. Geralmente, arquivos binários são manipulados mais rapidamente do que os de texto. ̶ Arquivos no modo texto, após a execução do programa, podem ser acessados facilmente por um editor de texto, tendo seu conteúdo legível. 10Programação Estruturada A estrutura FILE ̶ Ponteiros de arquivos para a leitura e escrita em arquivos: ̶ Relaciona o sistema de E/S a um buffer e contém informações do arquivo; ̶ Não aponta diretamente para o arquivo em disco, controla qual o próximo byte a ser acessado por um comando de leitura. ̶ Declaração: ̶ FILE *ponteiro; ̶ Exemplo: ̶ FILE *fptr; ̶ FILE *p; 11Programação Estruturada Abrindo um arquivo ̶ Preparar o arquivo para operações de leitura e/ou escrita, devolvendo um ponteiro para a estrutura FILE associada. ̶ Sintaxe: ̶ Ponteiro = fopen(nome, modo); ̶ Exemplos: ̶ ftpr = fopen("teste.txt", "r"); //mesma pasta do arquivo .c ̶ arquivo = fopen("teste.bin", "wb"); ̶ pontarq = fopen("c:\\tmp\\teste.txt", "w+"); 12Programação Estruturada Abrindo um arquivo 13Programação Estruturada Tipo Descrição Texto Binário “r” “rb” Abre um arquivo para leitura, que deve existir no disco. “w” “wb” Abre um arquivo para escrita. Caso ele já exista, ele será destruído e reinicializado. Caso contrário, ele será criado. “a” “ab” Abre um arquivo para gravação. Caso ele já exista, os dados serão adicionados ao seu final. Caso contrário, ele será criado. “r+” “w+” “a+” “r+b” “w+b” “a+b” Abre um arquivo texto/binário para a leitura/escrita. Se não existir, ele será criado. Abrindo um arquivo ̶ Erro na abertura: FILE *pont; pont = fopen("teste.bin", "wb"); if (pont != NULL) printf(“Arquivo aberto com sucesso!”); else printf(“Erro! Arquivo não foi criado!”); 14Programação Estruturada Fechando um arquivo ̶ Ao encerrar o processamento de um arquivo devemos fechá-lo. ̶ Sintaxe: ̶ fclose(ptarq); 15Programação Estruturada Manipulação de dados em um arquivo Acesso e manipulação de arquivos por meio de: ̶ Leitura e gravação de caracteres; ̶ Dados são lidos e gravados caractere a caractere; ̶ Funções: ̶ getc(caracter, ponteiro) => leitura de caracter de um arquivo; ̶ putc(caracter, ponteiro) => gravação de caracter em um arquivo. 16Programação Estruturada Gravação de caracteres em arquivo texto ̶ putc(caracter, ponteiro) #include <stdio.h> int main(){ char c; FILE *ptArq; ptArq = fopen("exemplo.txt", "w"); if (ptArq != NULL) printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 17Programação Estruturada printf("Digite um caracter: "); scanf("%c", &c); putc(c, ptArq); printf("\n Fechando o arquivo..."); fclose(ptArq); } Gravação de caracteres em arquivo texto ̶ Exemplo: escrevendo vários caracteres #include <stdio.h> int main(){ char c; FILE *ptArq; ptArq = fopen("exemplo.txt", "w"); if (ptArq != NULL) printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 18Programação Estruturada Gravação de caracteres em arquivo texto do{ printf("Digite um caracter: "); fflush(stdin); scanf("%c", &c); putc(c, ptArq); }while (c != ' '); printf("\n Fechando o arquivo..."); fclose(ptArq); } 19Programação Estruturada Leitura de caracteres em arquivo texto ̶ getc(ponteiro) Realiza a leitura de um arquivo caracter a caracter. Quando chega ao final do arquivo, a função retorna o valor EOF (End of File). Exemplo: #include <stdio.h> #include <conio.h> int main(){ char c= ‘ ’; FILE *ptArq; ptArq = fopen("exemplo_leitura.txt", "r"); 20Programação Estruturada Leitura de caracteres em arquivo texto if (ptArq != NULL) printf("Arquivo acessado com sucesso!"); else{ printf("Arquivo não foi aberto!"); exit(0); } do{ c = getc(ptArq); printf("%c", c); }while (c != EOF); printf("\n Fechando o arquivo... "); fclose(ptArq); } 21Programação Estruturada Manipulação de dados em um arquivo Acesso e manipulação de arquivos por meio de: ̶ Leitura e gravação de strings (exclusivo para arquivos do tipo texto); ̶ Dados são lidos e gravados por meio de strings; ̶ Funções: ̶ fgets(string, tamanho, ponteiro) => leitura de string; ̶ fputs(endereço_string, ponteiro) => gravação de string. 22Programação Estruturada Leitura de strings em arquivo texto Acesso e manipulação de arquivos por meio de: ̶ fgets(string, tamanho, ponteiro) => leitura de string; ̶ A função faz a leitura de uma linha inteira; ̶ A função finaliza a leitura quando lê um caractere de nova linha (‘\n’) ou quando recebe o status EOF, retornando o endereço da string lida, que será NULL quando chegar ao fim do arquivo. ̶ Exemplo: fgets(texto, 91, pontArq); Lê até 90 caracteres ou até o ‘\n’ do arquivo associado a pontarq e armazena-os em texto, como uma string. 23Programação Estruturada Leitura de strings em arquivo texto Exemplo: leitura de 1 linha do arquivo #include <stdio.h> int main(){ char string[100]; FILE *ptArq; ptArq = fopen("exemplo.txt", "r"); if (ptArq != NULL) printf("Arquivo aberto com sucesso! "); else{ printf("Arquivo não foi criado! "); exit(0); } 24Programação Estruturada Leitura de strings em arquivo texto printf("Conteúdo lido:\n"); fgets(string, 100, ptArq); printf("%s", string); printf("\n Fechando o arquivo..."); fclose(ptArq); } 25Programação Estruturada Leitura de strings em arquivo texto Exemplo: leitura de todo o arquivo #include <stdio.h> int main(){ char string[100]; FILE *ptArq; ptArq = fopen("exemplo.txt", "r"); if (ptArq != NULL) printf("Arquivo aberto com sucesso! "); else{ printf("Arquivo não foi criado! "); exit(0); } 26Programação Estruturada Leitura de strings em arquivo texto printf("Conteúdo lido:\n"); while( (fgets(string, 100, ptArq))!=NULL ) printf("%s\n", string); printf("\n Fechando o arquivo..."); fclose(ptArq); } 27Programação Estruturada Gravação de strings em arquivo texto Acesso e manipulação de arquivos por meio de: ̶ fputs(endString, ponteiro) => gravação de string; ̶ A função faz a gravação linha a linha; ̶ A função não coloca o caracter ‘\n’ ao final da gravação da linha. É necessário fazer isso explicitamente. ̶ Exemplo: fputs( string, pontArq); fputs("\n", pontArq); 28Programação Estruturada Gravação de strings em arquivo texto Exemplo: #include <stdio.h> int main(){ char string[100]; FILE *ptArq; ptArq = fopen("exemplo.txt", "w"); if (ptArq != NULL) printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0);} 29Programação Estruturada Leitura de strings em arquivo texto printf(“Digite a informação que deseja gravar no arquivo:”); fgets(string, 100, stdin); //ou gets(string); fputs(string, ptArq); fputs("\n",ptArq); printf("\n Fechando o arquivo..."); fclose(ptArq); } 30Programação Estruturada Manipulação de dados em um arquivo Acesso e manipulação de arquivos por meio de: ̶ Leitura e gravação de dados formatados; ̶ Dados são lidos e gravados com formato, semelhante ao uso dos comandos printf e scanf; ̶ Usados para arquivo texto. ̶ Funções: ̶ fscanf(ponteiro, “operador/formato”, &argumentos) => leitura de dado formatado; ̶ fprintf(ponteiro, “operador/formato”, argumentos) => gravação de dado formatado. 31Programação Estruturada Leitura e gravação de dados formatados ̶ Exemplo de gravação formatada #include <stdio.h> int main(){ FILE *ptArq; int idade=20; ptArq = fopen("exemplo.txt", "w"); if (ptArq != NULL){ printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 32Programação Estruturada Leitura e gravação de dados formatados fprintf(ptArq, "Isso é um teste!\n"); fprintf(ptArq, "%d\n", idade); fprintf(ptArq, "%s tem %d anos\n", "João", idade); printf("\n Fechando o arquivo..."); fclose(ptArq); } 33Programação Estruturada Leitura e gravação de dados formatados ̶ Exemplo de gravação formatada #include <stdio.h> int main(){ FILE *ptArq; int idade; char nome[50]; ptArq = fopen("exemplo.txt", "w"); if (ptArq != NULL){ printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 34Programação Estruturada Leitura e gravação de dados formatados printf("Informe o seu nome"); gets(nome); printf("Informe sua idade:"); scanf("%d",&idade); fprintf(ptArq, "Nome\tIdade\n"); fprintf(ptArq, "%s\t%d\n", nome, idade); printf("\n Fechando o arquivo..."); fclose(ptArq); } 35Programação Estruturada Leitura e gravação de dados formatados ̶ Exemplo de leitura formatada #include <stdio.h> #include <string.h> int main(){ FILE *ptArq; int idade=0; char nome[20]; ptArq = fopen("leitura.txt", "r"); if (ptArq != NULL) printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 36Programação Estruturada Leitura e gravação de dados formatados fscanf(ptArq, "%d", &idade); printf("\nIdade lida: %d", idade); fscanf(ptArq, "%s %d", nome, &idade); printf("\nNome e idade lidos foram: %s, %d", nome, idade); printf("\n Fechando o arquivo..."); fclose(ptArq); } 37Programação Estruturada DÚVIDAS ? 38Programação Estruturada Exercício 1) Faça um programa que armazene em um arquivo denominado raizQuadrada.txt uma tabela de raízes quadradas dos cem primeiros inteiros positivos. 2) Faça um programa que defina uma estrutura (código, nome, idade e endereço) e após cadastrar seus dados, grave o conteúdo da estrutura no arquivo texto gravStruct.txt. Crie um cabeçalho para esse arquivo, contendo o nome de cada informação armazenada. Utilize a opção \t para a tabulação entre os dados do cabeçalho e os dados do registro. 39Programação Estruturada
Compartilhar