Jump to content
Hubsch

Ler ficheiros

Recommended Posts

Hubsch

//
//  
//  Euromilhoes v.01
//
//  Created by Tiago
//  Copyright © 2013 Tiago. All rights reserved.
//

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;

// VARIAVEIS GERAIS

void menus(),Novomembro()/*Sorteios()*/,CarregarFicheiros(),AtualizarFicheiros(),limpar();
struct membros {
string NomePro;
string Apelido;
unsigned long ID;
};
vector<membros> dados;

// FIM DAS VARIAVEIS

void limpar(){

cout << string(100,'\n');
}

int main()
{
CarregarFicheiros();
menus();
AtualizarFicheiros();
}

void menus() {

string stringTemp;
bool variavel=false;

do {
cout << setw(40) << "*+*EUROMILHOES _ GESTOR*+*" << endl;
cout << "---------" << endl << "1. Registar Utilizador" << endl<< "2. Ultimos sorteios" << endl <<  "3. Sair" << endl << "---------" << endl << "R: ";
getline(cin,stringTemp);

if ( stringTemp == "1")
	return Novomembro();
//if (stringTemp == "2")
  //  return Sorteios();
if  ( stringTemp == "3")
	return;

}
while( variavel == false);
}

void Novomembro() {

string stringTemp;
membros novo;
limpar();
//
cout << setw(40) << "*+*EUROMILHOES _ GESTOR*+*" << endl;
cout << setw(30) << "REGISTO"<< endl;
cout << "---------" << endl;
cout << "Nome proprio: ";
getline(cin,stringTemp);
cout << endl;
novo.NomePro=stringTemp;
cout << "Ultimo Nome: ";
getline(cin,stringTemp);
cout << endl;
novo.Apelido=stringTemp;
novo.ID = dados.size();
//

dados.push_back(novo);
limpar();
return menus();
}

void CarregarFicheiros(){

string stringTemp;
ifstream Users;
membros carregar;

if( Users.is_open())
{
	getline(Users,stringTemp);

	for (unsigned int i = 0; Users.eof(); i++)
	{
		getline(Users,stringTemp);
		carregar.ID = stoi(stringTemp.substr(0, 7));
		carregar.NomePro=stringTemp.substr(10,30);
		carregar.Apelido=stringTemp.substr(35,55);
		dados.push_back(carregar);
	}
	Users.close();
}
else
{
	ofstream Users;
	Users.open("Users.txt");
	Users << setw(7) << " ID" << setw(22) << "NOME PROPRIO" << setw(20) << "APELIDO" << endl;
	Users.close();
}
}

void AtualizarFicheiros(){

ofstream Users;

Users.open("Users.txt");

Users << setw(7) << " ID" << setw(22) << "NOME PROPRIO" << setw(20) << "APELIDO" << endl;

for(unsigned int i = 0; i < dados.size();i++)
{

	Users << setw(7) << setfill('0') << dados[i].ID + 1 << "   " << setw(20)<< setfill(' ') << dados[i].NomePro << "   " << setw(20) << setfill(' ') << dados[i].Apelido << endl;

}
}

O caso é o seguinte: Ao registar um novo membro e ao guardar o ficheiro fica correto, isto é ( exemplo ) :

 ID		 NOME PROPRIO			 APELIDO
0000001 Tiago Neto
0000002 Ricardo			 Azevedo
0000003 Luis Leal Pedo                                                       ( fica tudo alinhado, mas aqui não está )
0000004	 Catarina alarido Porto
0000005 Pedro Joao

até aqui tudo bem , o problema é que depois de reiniciar o programa e registar novos utilizadores ele apaga o ficheiro todo e volta a escrever tudo de novo, creio que eu que haja algum problema ao ler o ficheiro, contudo não vejo onde. Agradeço a ajuda.

Share this post


Link to post
Share on other sites
Bernardo Vieira

Porque é que nao tentas por partes? Creio que assim nao demoras muito a encontrar problema. Tens certeza que lê o ficheiro corretamente? e que dá os valores que se encontram no ficheiro ás variaveis? ou será problema ao salvar? ou quando registas o membro? Também nao vi erro nenhum...

Share this post


Link to post
Share on other sites
Hubsch

O programa não lê o ficheiro corretamente. Já tentei em vez disto :

for (unsigned int i = 0; Users.eof(); i++)
		    {
				    getline(Users,stringTemp);
				    carregar.ID = stoi(stringTemp.substr(0, 7));
				    carregar.NomePro=stringTemp.substr(10,30);
				    carregar.Apelido=stringTemp.substr(35,55);
				    dados.push_back(carregar);
		    }

, ter isto:

for (unsigned int i = 0; Users.eof(); i++)
		    {
				    getline(Users,stringTemp);
				    dados[i].ID = stoi(stringTemp.substr(0, 7));
				    dados[i].NomePro=stringTemp.substr(10,30);
				    dados[i].Apelido=stringTemp.substr(35,55);
		    }

Share this post


Link to post
Share on other sites
Hubsch

void CarregarFicheiros(){

string stringTemp;
ifstream Users;
membros carregar;
Users.open("Users.txt");

if( Users.is_open())
{
	getline(Users,stringTemp); // Ignorar Primeira linha

	while( getline(Users,stringTemp))
	{
		getline(Users,stringTemp);
		carregar.ID = stoi(stringTemp.substr(0, 6));
		carregar.NomePro=stringTemp.substr(10,30);
		carregar.Apelido=stringTemp.substr(35,55);
		dados.push_back(carregar);
	}

	Users.close();
}
if (Users.fail()) {

	ofstream Users1;
	Users1.open("Users.txt");
	Users1 << setw(7) << " ID" << setw(22) << "NOME PROPRIO" << setw(20) << "APELIDO" << endl;
	Users1.close();
}
}

Já consegui. Aqui está a solução.

Edited by Hubsch

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.