Laboratório de Técnicas de Programação Slide 02 – Arquivos (continuação) Juliano Amorim de Oliveira [email protected] Instituto Metodista Isabela Hendrix Curso de Análise e Desenvolvimento de Sistemas Na aula anterior Arquivos como meio persistente de dados Dois tipos de arquivos Arquivo texto Arquivo binário E/S com Arquivos em C <stdio.h> Conceito de stream: arquivos e dispositivos O ponteiro de arquivos (FILE *fp) Modos de abertura de arquivos Na aula anterior Abrindo e Fechando um arquivo Modos de abertura (r, w, a, rb, wb, ab, ...) Manipulação de arquivos texto Lendo Escrevendo Descarregando o buffer Verificando o fim do arquivo Resumo das funções de ES em C – estudadas até agora FILE * fopen (const char *fp, const char *mode) int fclose(FILE *fp) Escreve em um arquivo os dados especificados no formato int fflush(FILE *fp); Lê de um arquivo os dados especificados no formato int fscanf(FILE *fp, const char *fmt, ...) Fecha um arquivo int fprintf(FILE *fp, const char *fmt, ...) Abre um arquivo Descarrega o buffer int feof(FILE *fp) Retorna verdadeiro se o fim do arquivo foi atingido Resumo das funções de ES em C – outras funções int fgetc (FILE *fp); int fputc(int ch, FILE *fp) Grava uma cadeia de caracteres no arquivo int fputs(char *str, FILE *fp); Grava um único caractere no arquivo char * fgets(char *str, int length, FILE *fp); Lê um único caractere do arquivo Lê uma cadeia de caracteres do arquivo void rewind(FILE *fp) Reposiciona o cursor de posição do arquivo para o início do mesmo. “Rebobina" o arquivo. Lendo e Escrevendo Caracteres As operações mais simples em arquivos texto são a leitura e escrita de caracteres Para ler e escrever caracteres existem as funções fgetc e fputc, respectivamente. Lendo um caracterer int fgetc (FILE *fp); Lê um caractere e retorna na função A função lê um caractere como um unsigned char mas retorna o valor como um inteiro, onde o byte mais significativo vale zero. A função devolve o código EOF ao chegar ao final do arquivo. EOF possui o valor -1 Válido somente para arquivos textos. Em arquivos texto não há caractere com código ASCII negativo. Escrevendo um caractere int fputc(int ch, FILE *fp) Escreve um caractere no arquivo A função recebe o caractere ch como um valor inteiro mas trata-o como um unsigned char. O byte mais significativo do inteiro é descartado. Se o caractere for escrito com sucesso o caractere informado no parâmetro ch será retornado na função. Exercício 01 – Escrever um programa em Linguagem C que: 1. Lista as opções do usuário e receber a opção informada. Algo como: 1- Escrever uma linha 2- Ler uma linha 3- Sair do Programa Entre sua opção: O sistema só termina sua execução quando a opção 3 for informada. Ao terminar a execução das demais opções a tela de menu é reimpressa e uma nova opção é solicitada ao usuário. 2. Escrever uma string no arquivo, sempre ao final do mesmo. Primeiro será solicitada a string em seguida ela será escrita no final do arquivo. 3. Ler uma linha especificada pelo usuário. O usuário irá informar o número da linha a ser lida no mesmo arquivo onde estão sendo gravadas as strings. As linhas válidas vão de 0 até o número de linhas do arquivo. Se o usuário informar uma linha maior do que o número de linhas do arquivo, uma mensagem informando tal ocorrência deve ser impressa na tela. Lendo e escrevendo cadeias de caracteres fgets e fputs efetuam as operações de leitura e escrita de strings (cadeias de caracteres) Operam de forma semelhante a fgetc e fputc, mas ao invês de ler e escrever um único caractere operam com strings. Lendo uma cadeia de caracteres char * fgets(char *str, int length, FILE *fp) Lê uma string do arquivo especificado até que um caractere de nova linha seja encontrado ou o número de caracteres lido seja igual a length – 1. Retorna o ponteiro para a variável string lida Escrevendo uma cadeia de caracteres int fputs(char *str, FILE *fp); Escreve a cadeia de caracteres no arquivo especificado EOF é retornado se houver algum erro e o valor 0 se a string for gravada com sucesso. Exercício 02 Reescrever o exercício 01 utilizando as funções fgets e fputs.