C - Ler no arquivo e jogar numa struct

1 resposta
K

Estou com um problema que pensei ser simples. Ler dados num arquivo txt, os dados sempre terão tamanho fixo (ex. codigo tem 8 caracteres, cpf 14, nome 47...) e salvá-los numa struct.
1234 76543FULANO DE TAL ENDERECORUATAL BAIRROCENTRO CIDADEBH MG
...
...
...
...

#include <stdio.h>

struct dados { 
    int codigo[8];
    char cpf[14];
    char nome[47];
    char endereco[50];
    char bairro[20];
    char municipio[20];
    char uf[2];
};

typedef struct dados info;

main(){ 
    
    FILE *arq;
    char Linha[164];
    char Linha2[6][164];
    char *result;
    info registro[6];
    int i,j;
    arq = fopen("FORN.txt", "rb");
    if (arq == NULL){
        printf("Problemas na abertura do arquivo\n");
        return;
    }
    i=0;
    while (!feof(arq)){
        fgets(registro[i].codigo, 9, arq); 
        fgets(registro[i].cpf, 16, arq); 
        fgets(registro[i].nome, 49, arq); 
        fgets(registro[i].endereco, 51, arq); 
        fgets(registro[i].bairro, 21, arq); 
        fgets(registro[i].municipio, 21, arq); 
        fgets(registro[i].codigo, 3, arq); 
        i++
    }
    for(i=0;i<6;i++){
    printf("\n%d\n", registro[0].codigo);
    printf("%s\n", registro[0].cpf);
    printf("%s\n", registro[0].nome);
    printf("%s\n", registro[0].endereco);
    printf("%s\n", registro[0].bairro);
    printf("%s\n", registro[0].municipio);
    printf("------%s\n", registro[0].uf);
    fclose(arq);
    }
}

Já tentei usando GETC, FGETS, FSCANF, FREAD, até consigo ler mas o problema é quando quero pegar a string que recebeu os valores e jogar na struct. Alguma idéia?

1 Resposta

D

acho que esse codigo pode ajudar em alguma coisa um jeito mais facil de ler o arquivo.

#include <stdio.h>

struct dados { 
    int codigo[8];
    char cpf[14];
    char nome[47];
    char endereco[50];
    char bairro[20];
    char municipio[20];
    char uf[2];
};

int main(int argc, char **argv) {
    FILE * fp = fopen("test.dat", "wb");
    struct dados dd;
   ...
   escreva os dados da struct dados.
   ...
   fwrite(&dd, sizeof(struct dados), 0, fp); 
   fclose(fp);
   
    FILE * fp2 = fopen("test.dat", "wb");
    struct dados dd2;
    fread(&dd2, sizeof(struct dados), 0, fp2);
    fclose(fp2);
   
}
Criado 27 de maio de 2012
Ultima resposta 27 de mai. de 2012
Respostas 1
Participantes 2