aula 212

Como ler texto de um arquivo com a função fgets?

Dando continuidade ao estudo de manipulação de arquivos com a linguagem C, vamos aprender nesta aula como ler texto de um arquivo com a função fgets.

A função fgets recebe três parâmetros: onde salvar o que será lido; a quantidade máxima de caracteres que pode ser lido e de onde será lido. Ela retorna a quantidade de caracteres que de fato foram lidos.

Se você está acompanhando o curso aqui do canal você deve se lembrar que já utilizamos esta função para ler texto do teclado. A diferença agora é que, como desejamos ler texto de um arquivo, vamos trocar o terceiro parâmetro que era stdin (teclado, a entrada padrão do computador) pelo ponteiro para o arquivo que desejamos ler, assim:

     // lendo texto de um arquivo
     fgets(texto, 499, file)

Observe que a função como escrita acima lê até encontrar um ENTER (uma quebra de linha) ou no máximo 499 caracteres, que é o tamanho do nosso vetor.

Agora podemos percorrer todo nosso arquivo, lendo e imprimindo no terminal enquanto não encontrarmos o fim do arquivo, assim:

        // lendo um arquivo até o final
        while(!feof(file)){
            if(fgets(texto, 499, file))
                printf("\n--> %s", texto);
        }

Talvez você esteja se perguntando por que do teste (if) dentro do while. É simples. No procedimento da aula anterior, após a escrita de cada linha, foi inserido uma quebra de linha a fim de separar cada linha de texto. Assim, após lermos a última linha de texto, ainda terá uma quebra de linha no arquivo, por isso não será identificado ainda o fim do arquivo. O teste dentro do while ainda será verdadeiro e uma nova linha será lida do arquivo. Acontece que esta nova linha possui apenas a quebra de linha. Como a função fgets lê até a quebra de linha, a quantidade de caracteres lidos será zero (lembra que em C zero é falso?), logo, não podemos imprimir nosso vetor que contêm a última frase lida e já impressa.

Código de exemplo completo em C para ler arquivo texto com a função fgets

/*
        Aula 212: Como ler linhas de texto com a função fgets?

        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)
*/

void escrever(char f[]) {
    FILE *file = fopen(f, "w");
    char texto[500];

    if(file) {
        printf("Digite uma frase ou 1 caracter para finalizar:\n");
        scanf("%499[^\n]", texto);
        scanf("%c");
        while(strlen(texto) > 1){
            fputs(texto, file);
            fputc('\n', file);
            scanf("%499[^\n]", texto);
            scanf("%c");
        }
        fclose(file);
    } else
        printf("\nERRO ao abrir arquivo!\n");
}

void ler(char f[]) {
    FILE *file = fopen(f, "r");
    char texto[500];

    if(file){
        printf("\n\tTexto lido do arquivo\n");
        while(!feof(file)){
            if(fgets(texto, 499, file))
                printf("\n--> %s", texto);
        }
        fclose(file);
    }
    else
        printf("\nERRO ao abrir arquivo!\n");
}

int main() {

    char nome[] = {"conto.txt"};

    escrever(nome);
    ler(nome);

    return 0;
}

Deixe um comentário

doze + quinze =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.