Ir ao conteúdo
  • Cadastre-se
Visitante

Arquivos c++

Recommended Posts

Visitante

Olá,

Estou em um trabalho de faculdade e cheguei a um pequeno problema na hora de leitura/gravação de arquivos.

Quando fecho meu programa, o seguinte código é executado:

ofstream fout("Dados.txt");
	fout << contador_clientes << " ";
	for(int i = 1; i < contador_clientes; i++){
		fout << data[i].ID <<" "<< data[i].nome <<" "<< data[i].telefone <<" "<< data[i].endereco <<" "<< data[i].email <<" "<< data[i].CPF <<" "; 
	}

E quando abro há a opção de importar os dados salvos na ultima execução:

cout << "Deseja importar dados anteriores? ";
	cin >> op;
	if(op == "s" || op == "S"){
		ifstream fin("Dados.txt");
		fin >> contador_clientes;
		line++;
		for(int i = 1; i < contador_clientes; i++){
			string id;
			fin >> data[i].ID;
			fin >> data[i].nome;
			fin >> data[i].telefone;
			fin >> data[i].endereco;
			fin >> data[i].email;
			fin >> data[i].CPF;
		}
		fin.close();
	}

Até aí tudo bem, mas as partes do struct "data[].nome" e "data[].endereco" são strings compostas ( com espaços ), e o jeito que coloquei considera o próximo dps do espaço como próxima entrada...

Como posso mudar esses códigos pra ler esses dois completos? :x

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na manipulação de arquivos existe muitas forma de se fazer isso. Algumas formas podem ser ter a todas as entradas do mesmo tamanho em bytes, assim ler é mais fácil porque você ja sabe quantos bytes precisa ler. porém se o arquivo está serializado, certamente esses campos variam em bytes, podem conter espaços, e pior ainda poden ser uma representação da memória(binario). TAl como você descreve o problema você tem um conjunto de chars, e alguns campos possuem espaços, acho que a melhor solução é 'tokenizar' o arquivo. Essa tecnica consiste em separar os campos por algum caractere como a virgula por exemplo, você teria algo como:
"Raul Gutierres, 39, Rua Genaro São Lorenço, 1334"

Essa estrutura poderia pertencer a uma estrutura como:
struct Dados{
char nome[100];
int idade;
char nomeAvenida;
int numeroCasa;
};

Claramente é uma string na qual os campos estão separados por vírgulas, dai você aplica a tática de tokens para separar('tokenizar') a frase em palavras, parece algo complexo de aprender porém não tanto, é uma boa pratica e sem duvida, você terá que aprender isso em algum momento se quiser trabalhar como programador, assim que leia isso:

http://www.cplusplus.com/reference/cstring/strtok/

E isso também:
http://pt.stackoverflow.com/questions/95938/dividir-um-string-com-espaços-vazios

 

Nessas paginas você tem exemplos de como fazer o que você quer, é só adaptar para que trabalhe com arquivos.
Eu faria uma função que separasse um string e criar uma matriz com todas as palavras ou inclusive algo mais elegante como ler palavra por palavra do arquivo.

Espero ter ajudado. se tiver problema ponha aqui. Fui!

  • Curtir 1

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

×