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;
}
