Ir ao conteúdo
  • Cadastre-se
Lucas.Rocha_21

Dúvida - Leitura linha a linha de arquivo texto

Recommended Posts

Estava vendo as funções responsáveis pela leitura e gravação de strings via arquivo texto e me deparei com a função fgets, que recebe como parâmetro um vetor de carácter, a quantidade de strings que serão lidas e o ponteiro que aponta para o meu arquivo texto. 

Para tal é necessário que eu aloque em tempo de copilação um vetor com uma quantidade fixa de espaço para armazenar o conteúdo das linhas, como pode ver neste programa-teste que fiz:

#include <stdio.h>#include <stdlib.h>#include <locale.h>int main(void){    FILE *arquivoTexto;    char letra;    int cont = 0;    char temp2[100];    setlocale(LC_ALL, ""); //aceitar acentos    arquivoTexto = fopen("teste.txt", "w");    if(!arquivoTexto) //ou arquivoTexto == NULL    {        printf("Arquivo nao pode ser gravado");        exit(1);    }    fputs("Isto é um teste para ver se este arquivo\n", arquivoTexto);    fputs("texto conseguiu gravar os arquivos adequadamente:\n", arquivoTexto);    fputs("Mesmo com quebra de linhas\te inclusive tabulações.\n", arquivoTexto);    fputs("Encerro este texto para afirmar que consegui.", arquivoTexto);    printf("O arquivo foi gravado corretamente.\nAbra-o para ver\n\n");    fclose(arquivoTexto);    arquivoTexto = fopen("teste.txt", "r");    if(!arquivoTexto) //ou arquivoTexto == NULL    {        printf("Arquivo nao pode ser lido");        exit(1);    }    while(!feof(arquivoTexto))    {        fgets(temp2, 100, arquivoTexto);        printf("%s", temp2);    }    return 0;}

Como vocês percebem, cada linha do meu texto não possui um número fixo de caracteres. Uma delas é maior que a outra. Logo preciso "desperdiçar memória" chutando um valor alto para armazenar as strings.

Gostaria de saber se tenho como alocar dinamicamente este vetor temp2 para que ele armazene a linha, não importa o número de caracteres que ela tenha e como procederia para fazer isto. Ou esta função fgets só aceita vetores estáticos?  

trabalhando com arquivos 3.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode saber o tamanho do arquivo antes e alocar a memória pro tamanho exato,voce pode fazer isso usando a API da WIN,com a função GetFileSizeEx ou usando fseek pro final do arquivo,por exemplo

FILE * pfi = fopen("arq.txt","r");fseek(pfi,0,SEEK_END);long int tam = ftell(pfi);        char *p = (char*)malloc(tam);fseek(pfi,0,SEEK_SET);fgets(p,tam,pfi);

se for isso que voce quer saber..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×