Nas aulas anteriores nós aprendemos a escrever e a ler em arquivo texto com as funções fputc e fgetc. Contudo, todo nosso código ficou dentro da função main. Nesta aula vamos ver como organizar a leitura e a escrita em arquivo com funções e procedimentos.
Como já aprendemos ao longo do nosso curso, dividir um problema em partes (funções e procedimentos) é uma estratégia muito eficiente que torna a solução do mesmo mais fácil. Como normalmente um mesmo sistema terá de ler e escrever em arquivos, podemos criar procedimentos específicos para estas ações e chamar sempre que for necessário, como apresentado a seguir.
No trecho de código a seguir temos um procedimento para escrever em arquivo. O nome do arquivo é passado para o procedimento como parâmetro. Neste exemplo o conteúdo a ser escrito no arquivo será lido do teclado dentro do procedimento. Contudo, em um sistema real, normalmente essas informações viriam também por parâmetro, junto com o nome do arquivo, ou seriam buscadas em alguma fonte como um banco de dados ou mesmo na web.
// procedimento para escrever em um arquivo texto void escrever(char f[]) { FILE *file = fopen(f, "w"); char letra; if(file) { printf("\nDigite um texto e pressione ENTER ao finalizar!"); scanf("%c", &letra); while(letra != '\n') { fputc(letra, file); scanf("%c", &letra); } fclose(file); } else printf("\nERRO ao abrir arquivo!\n"); }
De forma muito semelhante ao procedimento anterior, temos a seguir um procedimento para fazer a leitura de um arquivo. O nome do arquivo é recebido como parâmetro e o mesmo será aberto para leitura. Caso o arquivo seja aberto com sucesso, seu conteúdo será lido e impresso no terminal.
// procedimento para ler um arquivo texto void ler(char f[]) { FILE *file = fopen(f, "r"); char letra; if(file){ printf("\n\tTexto lido do arquivo:\n"); while(!feof(file)) { letra = fgetc(file); printf("%c", letra); } fclose(file); } else printf("\nERRO ao abrir arquivo!\n"); }
Agora que a leitura e a escrita no arquivo não serão mais feitas dentro da função main, esta fica com seu tamanho bem resumido, como apresentado a seguir.
int main() { char nome[] = {"conto.txt"}; escrever(nome); ler(nome); return 0; }
Código de exemplo completo em C com procedimentos para ler e escrever em arquivo texto
/* Aula 210: Organizando nosso código em procedimentos Código escrito por Wagner Gaspar Junho de 2021 Modos de abertura de arquivos: w -> Escrita r -> leitura a -> anexar r+ -> leitura e escrita w+ -> leitura e escrita (apaga o conteúdo caso o arquivo exista) a+ -> leitura e escrita (adiciona ao final do arquivo) */ #include <stdio.h> #include <stdlib.h> void escrever(char f[]) { FILE *file = fopen(f, "w"); char letra; if(file) { printf("\nDigite um texto e pressione ENTER ao finalizar!"); scanf("%c", &letra); while(letra != '\n') { fputc(letra, file); scanf("%c", &letra); } fclose(file); } else printf("\nERRO ao abrir arquivo!\n"); } void ler(char f[]) { FILE *file = fopen(f, "r"); char letra; if(file){ printf("\n\tTexto lido do arquivo:\n"); while(!feof(file)) { letra = fgetc(file); printf("%c", letra); } fclose(file); } else printf("\nERRO ao abrir arquivo!\n"); } int main() { char nome[] = {"conto.txt"}; escrever(nome); ler(nome); return 0; }