fread com arquivo para salvar em struct onde os campos tem tamanhos variaveis.

1. fread com arquivo para salvar em struct onde os campos tem tamanhos variaveis.

Joao Jose Cardoso Ribeiro
joaojosecr

(usa Outra)

Enviado em 22/11/2019 - 01:34h

tenho que usar fread para ler um arquivo.dat e salvar os dados em um vetor de struct( que contem campos como nome, rua, bairro, etc), porem no arquivo.dat os campos são de tamanhos variáveis e separados por um carácter especifico. Como faço para limitar por esse caracter especifico e nao pelo tamanho do vetor?


Arquivo.dat:
DMZ W Bianco S Laura Carvalho Martins Avenida Atl??ntica . JARDIM FILADELFIA Esp??rito Santo RNEHKò
Honda City Ben??cio Ribeiro Rua Aires Saldanha  ESTACAO VILA OESTE Olho d????gua do Casado MAFCE : Chamonix Spyder 550 R Julia Alves Bueno Rua Bulh??es Carvalho $¦ CASA BRANCA
Arroio Trinta MSKVC$ Chevrolet Onix Carlo Martins Rua Hil??rio de Gouveia 9 POMPEIA Carir?? RJRQI- Chevrolet Classic Adolfo Melo Garcia Rua Maracana?? ê VILA CAFEZAL Arapoti AM

struct:
struct veiculo{
char placa[10];
char modelo[15];
char nome[20];
char rua[20];
int numero;
char cidade[20];
char bairro[20];
char estado[10];

};
coloquei esses valores nos vetores apenas para testar.


fread(&vet,sizeof(struct veiculo),10,arq);

estava usando a função assim, como aprendi, mas como os tamanhos dos arquivos sao variaveis nao esta danco certo, quando mando imprimir esta ficando td cortado, pela metade, etc.

resultado quando imprimo o primeiro registro:

placa: DMZ W
modelo: nco S
nome: rvalho Martins
rua: enida Atl??ntica
numero: 1229214273
cidade: M FILADELFIA
bairro: ito Santo
estado: Honda City


  


2. Re: fread com arquivo para salvar em struct onde os campos tem tamanhos variaveis.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/11/2019 - 01:15h

Se as larguras não são fixas, você simplesmente não deve usar fread(). Tem de ler o arquivo caráter a caráter, isolando as partes através de presença do caráter separador.

Se você estiver usando um sistema compatível com POSIX.1-2008, pode usar a função getdelim(). Se não estiver, pode sintetizar o que essa função faz (i.e. ler uma sequência de caracteres de um arquivo, respeitando um tamanho máximo que tal sequência pode ter, e interromper a leitura com menos caracteres do que o tamanho máximo se um delimitador for encontrado).


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts