Ir ao conteúdo
  • Cadastre-se

Dúvida - Leitura linha a linha de arquivo texto


Posts recomendados

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

Link para o comentário
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..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...