A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Prof. Luis Otavio Alvares

Apresentações semelhantes


Apresentação em tema: "Prof. Luis Otavio Alvares"— Transcrição da apresentação:

1 Prof. Luis Otavio Alvares
Arquivos Prof. Luis Otavio Alvares

2 Introdução a linguagem C utiliza o conceito de fluxo (stream) de dados para manipular vários tipos de dispositivos de armazenamento. Dados podem ser manipulados em dois diferentes tipos de fluxos: fluxos de texto e fluxos binários. Um fluxo de texto é composto por uma seqüência de caracteres, que pode ou não ser dividida em linhas terminadas por um caracter de final de linha.

3 Arquivos Um arquivo pode estar associado a qualquer dispositivo de entrada e saída, como por exemplo: teclado, video, impressora, disco rígido, etc. O processo de trabalhar com arquivos em C consiste em três etapas: Abrir o arquivo; Ler e/ou gravar as informaçõeses desejadas no arquivo; Fechar o arquivo.

4 Funções de entrada e saída
As funções mais usadas estão armazenadas na biblioteca stdio.h fopen() - Abre um arquivo fputc() - Escreve um caracter em um arquivo fgetc() - Lê um caracter de um arquivo fputs() – escreve uma string em um arquivo fgets() – lê uma linha de um arquivo fprintf()- Equivalente a printf() fscanf() - Equivalente a scanf() rewind() - Posiciona o arquivo no início feof() - Retorna verdadeiro se chegou ao fim do arquivo fclose() – fecha

5 Abertura de arquivo Antes de qualquer operação ser executada com o arquivo, ele deve ser aberto. Esta operação associa um fluxo de dados a um arquivo. Um arquivo pode ser aberto de diversas maneiras: leitura, escrita, leitura/escrita, adicão de texto, etc. A função utilizada para abrir o arquivo é fopen()

6 A função fopen() fopen(nome arquivo,modo de uso).
Os modos de uso mais comuns são: r (de read) : abre um arquivo texto para leitura w (de write) : cria um arquivo texto para escrita a (de append) : para adicionar conteúdo no fim de um arquivo texto já existente r+ : abre um arquivo texto para leitura/escrita w+ : cria um arquivo texto para leitura/escrita

7 Exemplo de uso #include<stdio.h> #include<stdlib.h> int main(){ FILE *arquivo; //vai ser associada ao arquivo arquivo = fopen("c:/luis/teste9.txt","r"); if(arquivo==0) printf("Erro na leitura do arquivo\n"); else printf("Arquivo aberto com sucesso\n"); fclose(arquivo); //fecha arquivo system("pause"); }

8 Leitura e gravação fgets (string, tamanho, arquivo)
fputs(string, arquivo) fgetc(arquivo) fputc(char, arquivo)

9 Exemplo: programa que faz copia de um arquivo
//copia o conteudo do arquivo tmp.txt em tmpCopy.txt #include<stdio.h> #include<stdlib.h> #define MAX 80 main(){ int ch; char linha[MAX]; FILE *input, *output; // uma forma de copiar (linha a linha) input = fopen( "tmp.txt", "r" ); if(input){ output = fopen( "tmpCopy2.txt", "w" ); fgets(linha, MAX, input); while(!feof(input) ) { fputs( linha, output ); } fputs( linha, output ); //para escrever a ultima linha (do EOF) fclose( input ); fclose( output ); else printf ("deu erro na abertura do arquivo tmp.txt\n"); system("pause");

10 continuação // outra forma de copiar (caracter a caracter)
input = fopen("tmp.txt", "r"); if(input){ output = fopen( "tmpCopy.txt", "w" ); ch = fgetc( input ); while( ch != EOF ) { fputc( ch, output ); } fclose( input ); fclose( output ); else printf ("deu erro na abertura do arquivo tmp.txt\n"); system("pause");

11 Exemplo mais completo // grava o nome de cinco alunos em um arquivo e depois le o arquivo e // mostra os nomes escritos #include <stdio.h> #include <string.h> #include <stdlib.h> main(){ FILE *p; char c, str[30], frase[80] = "Este e um arquivo chamado: “; char alunos [5][50], mostratexto [50]; int i,j=0, cont=0; // Le um nome para o arquivo a ser aberto: printf("\n\n Entre com um nome para o arquivo:\n"); gets(str); // le os nomes dos alunos e coloca no vetor alunos for (cont=0;cont<5;cont++) { printf ("\nInforme o nome do aluno %d: ", cont+1); gets(alunos[cont]); }

12 // abre o arquivo para gravacao
if (!(p = fopen(str,"w"))) // Caso ocorra algum erro na abertura //do arquivo da' mensagem e nao faz nada { printf("Erro! Impossivel abrir o arquivo!\n"); } else { // Se nao houve erro, grava o arquivo e o fecha ... for (i=0; i<5; i++){ strcat(alunos[i], "\n"); //concatena o \n no final da linha fputs(alunos[i],p); // grava no arquivo p fclose(p); // fecha o arquivo ao final da gravacao printf("\nTerminei de escrever, agora vou ler.\n"); // Abre novamente, agora para leitura p = fopen(str,"r"); //uma forma de mostrar fgets(mostratexto, 50, p); while (!feof(p)) // Enquanto não chegar no final do arquivo p printf("%s",mostratexto); fclose(p); // Fecha o arquivo p

13 // outra forma de mostrar
printf("\nde novo\n"); p = fopen(str,"r"); for (i=0; i<5; i++){ fgets(alunos[i], 50, p); printf("%s",alunos[i]); } fclose(p); // Fecha o arquivo } // do else de erro de abertura do arquivo system("pause");

14 Exercício Faça um programa que decodifique um determinado texto gravado em um arquivo, a partir da seguinte tabela de substituição de caracteres, gerando um novo arquivo: CARACTER EXISTENTE SUBSTITUIR POR A Z E Y I X O W U *

15 //copia o conteudo do arquivo tmp. txt em tmpCopy
//copia o conteudo do arquivo tmp.txt em tmpCopy.txt, com alteracoes #include<stdio.h> #include<stdlib.h> main(){ int c; FILE *ent, *sai; ent = fopen("tmp.txt", "r"); if(ent){ sai = fopen( "tmpCopy.txt", "w" ); c = fgetc( ent ); while( c != EOF ) { switch (c) { case 'A': c='Z';break; case 'E': c='Y';break; case 'I': c='X';break; case 'O': c='W';break; case 'U': c='*';break; } fputc( c, sai ); fclose( ent ); fclose( sai ); else printf ("deu erro na abertura do arquivo tmp.txt\n"); system("pause");

16 Exercício Considere um arquivo tipo texto já gravado.
Gere um novo arquivo com uma nova linha, com dados lidos do teclado, entre a terceira e a quarta linha deste texto. Mostre o conteudo do arquivo original e do novo.

17 Exemplo de solução //copia o conteudo do arquivo original.txt em copia.txt #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 150 main(){ int i; char linha[MAX]; FILE *entrada, *saida; entrada = fopen( "original.txt", "r" ); if(entrada){ saida = fopen( "copia.txt", "w" ); for (i=1;i<4;i++){ fgets(linha, MAX, entrada);//le as primeiras linhas fputs(linha, saida ); // copia para o arquivo de saida } printf("Informe o conteudo da linha a ser inserida: "); gets(linha); strcat(linha,"\n"); fputs(linha, saida ); // escreve a linha adicionada

18 continuação // copia o resto do arquivo, sem alteracao
fgets(linha, MAX, entrada); while(!feof(entrada) ) { fputs( linha, saida ); } fputs( linha, saida ); //para escrever a ultima linha (do EOF) fclose( entrada ); fclose( saida ); else printf ("deu erro na abertura do arquivo original.txt\n"); system("pause");


Carregar ppt "Prof. Luis Otavio Alvares"

Apresentações semelhantes


Anúncios Google