Jump to content

Duvida na leitura de Ficheiros


Tonne
 Share

Recommended Posts

Tenho uma duvida na leitura de ficheiros porque eu tenho que verificar de que objecto pertence ou Locais Históricos ou Locais Naturais

e depois guardar no respectivo vector e não sei como fazer eu tenho o seguinte código mas não sei como fazer a parte que mencionei em cima alguém me pode ajudar ??

Este é o código que tenho:

void Central::LerFicheiro_LocaisTuristicosNaturais(string nomefich){
string linha;
ifstream ficheiro;
ficheiro.open(nomefich);
if(!ficheiro)
cout << "Ficheiro não existe" << endl;
while (!ficheiro.eof()){
getline(ficheiro,linha,'\n');
if (linha.size() > 0){
int inicio = 0;
int pos = linha.find(',', inicio);if (pos==-1){ //se nao encontrar virgula logo ao inicio
string param1 = linha;
npost = (atoi(param1.c_str()));
}
  }
}
cout << "Ficheiro: " << nomefich << " lido com SUCESSO" << endl;
}
Edited by thoga31
GeSHi
Link to comment
Share on other sites

HappyHippyHippo

Tenho uma duvida na leitura de ficheiros porque eu tenho que verificar de que objecto pertence ou Locais Históricos ou Locais Naturais

e depois guardar no respectivo vector e não sei como fazer eu tenho o seguinte código mas não sei como fazer a parte que mencionei em cima alguém me pode ajudar ??

impossivel responder

- não dizes o que destingue um regito de um tipo ou de outro

- não dás um exemplo sequer dos dados no ficheiro

- não apresentas as declarações dos contentores que irão guardar os dados

- etc, etc ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Os Locais (classe mãe) só tem a descrição do local depois o que destingue os Locais Naturais dos Locais Historicos é que os Locais Naturais tem Area e os locais Históricos tem Tempo Medio Visitas, Horario de Abertura e Horario de Encerramento.

Os dados devem de sair do seguinte modo :

LocTurist1,9000

LocTurist2,120,570,1110 // Tempo médio de visita 120 min. (2h) está aberto das 9:30h às 18:30h

LocTurist3,5500

LocTurist4,2300

LocTurist5,20,540,870

Link to comment
Share on other sites

boas

Ainda em relação á mesma duvida ele esta me a ler os dados todos só que esta a repetir a leitura dos dados 3 vezes em todos os dados e eu não sei porque alguem me pode ajudar ??

int inicio = 0;
  int pos = linha.find(',',inicio);
  string descricao(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',',inicio);
  string area(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string tMedioVisitas(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioAbertura(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioEncerramento(linha.substr(inicio,pos-inicio));
Link to comment
Share on other sites

desculpem não enviei todo o código


int ind = 0;
string linha ;
ifstream ficheiro;
ficheiro.open(nomefich);

if(!ficheiro)
{
 cout << "Ficheiro não existente" <<endl;
}
while(getline(ficheiro,linha,'\n'))
{

 /*if(linha.size() > 0)
 {*/
  int inicio = 0;
  int pos = linha.find(',',inicio);
  string descricao(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',',inicio);
  string area(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string tMedioVisitas(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioAbertura(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioEncerramento(linha.substr(inicio,pos-inicio));
 }
/*}*/
 ficheiro.close() ;

eu faço cout para ver se esta a ler bem e ele repete cada linha do ficheiro 3 vezes

Link to comment
Share on other sites

Está aqui desculpa

int ind = 0;
string linha ;
ifstream ficheiro;
ficheiro.open(nomefich);

if(!ficheiro)
{
 cout << "Ficheiro não existente" <<endl;
}
while(getline(ficheiro,linha,'\n'))
{

 /*if(linha.size() > 0)
 {*/
  int inicio = 0;
  int pos = linha.find(',',inicio);
  string descricao(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',',inicio);
  string area(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string tMedioVisitas(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioAbertura(linha.substr(inicio,pos-inicio));
  pos++;
  inicio = pos;
  pos = linha.find(',', inicio);
  string horarioEncerramento(linha.substr(inicio,pos-inicio));
  cout<<descricao<<endl;
  cout<<area<<endl;
  cout<<tMedioVisitas<<endl;
  cout<<horarioAbertura<<endl;
  cout<<horarioEncerramento<<endl;
 }
/*}*/
 ficheiro.close() ;
Link to comment
Share on other sites

HappyHippyHippo

e o output é ?

LocTurist1,9000,9000,9000 
LocTurist2,120,570,1110
LocTurist3,5500,5500,5500 
LocTurist4,2300,2300,2300 
LocTurist5,20,540,870 

é mais fácil ter um filho que sacar-te a porcaria da informação necessária ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

HappyHippyHippo

ok ... mais uma vez vou ter que explicar tim tim por tim tim ...

primeira linha : LocTurist1,9000


  int inicio = 0;
  int pos = linha.find(',',inicio);                  // pos = 10
  string descricao(linha.substr(inicio,pos-inicio)); // descricao = "LocTurist1"
  pos++;                                             // pos = 11
  inicio = pos;                                      // inicio = 11
  pos = linha.find(',',inicio);                      // pos = -1
  string area(linha.substr(inicio,pos-inicio));      // area = linha.substr(11, (size_t) -1 -11)
                                                     //      = linha.substr(11, <numero positivo muito grande>)
                                                     //      = 9000
  pos++;                                             // pos = 0
  inicio = pos;                                      // inicio = 0
  pos = linha.find(',', inicio);                     // pos = -1

// patati, patata ...
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
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
 Share

×
×
  • 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.