Jump to content

Leitura de ficheiros


Squadfury
 Share

Recommended Posts

Ola pessoal..

Eu preciso de ajuda: Criei uma função que lê dados de um ficheiro e utiliza os dados para atribuir às diversas variáveis existentes e serve como alternativa ao insere dados na consola... A leitura dos dados é sequencial e o ficheiro so pode conter os dados a atribuir às variàveis:

void lePlanos(Lista& empres){
string titulo, instituiçao, empresario,linha;
double dconsumiveis, dconsultores,  compraEquip, deslocaçoes;
int duraçao;
int codigo = 0;

ifstream ficheiro;
ficheiro.open("exemplo.txt");

if (ficheiro.is_open() && ficheiro.good())
{
ficheiro.seekg(ios::beg);
ficheiro.clear();
cout << endl << "A ler dados..." << endl;
while ( ficheiro>>linha)
{
Lista * novo = new Lista();

getline(ficheiro, titulo);
cout << titulo;
novo->titulo = titulo;

getline(ficheiro, instituiçao);
cout << instituiçao;
novo->instituicao = instituiçao;

getline(ficheiro, empresario);
cout << empresario;
novo->empresario = empresario;

ficheiro >> dconsumiveis;
cout << dconsumiveis;
novo->gastos.dconsumiveis = dconsumiveis;

ficheiro >> dconsultores;
cout << dconsultores;
novo->gastos.dconsultores = dconsultores;

ficheiro >> compraEquip;
cout << compraEquip;
novo->gastos.compraEquip = compraEquip;

ficheiro >> deslocaçoes;
cout << deslocaçoes;
novo->gastos.deslocaçoes = deslocaçoes;

codigo = codigo + 1;
novo->codigo = codigo;

novo->seguinte = empres.seguinte;
empres.seguinte = novo;
cout << "-- -" << endl;
}

infile.close();
}

}

Eu queria saber se há possibilidade do exemplo.txt ser do tipo

titulo: vert

Instituiçao: Anac

Empresario; Pedro

Gastos consumiveis: 550

Gastos Consultores: 1230

Compra de equipamento: 890

gastos com Deslocações: 230

em vez de:

vert

Anac

Pedro

550

1230

890

230

Obrigado

Edited by Squadfury
Link to comment
Share on other sites

char buffer[256];

while(ficheiro.good()) {
 ficheiro.getline(buffer, 256)
 if (ficheiro.good()) {
   string line(buffer);
   string key = line.substr(0, line.find(':'));
   string value = line.substr(line.find(':') + 1);

        if (key == "batatas) {  }
   else if (key == "cebolas") {  }
   else if (key == "repolho") {  }
 }
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

int n;
std::string str = "32";

sscanf(str.c_str(), "%d", &n);
printf("%d\m", n);

nota: uma boa razão para saber C antes de C++

Esta parte está a escapar-me, após a leitura de dados do ficheiro eu vou ver os dados inseridos e na parte

dos inteiros e doubles aparecem erros. Ele está a ler tudo. eu fiz assim:

string linha;
int dconsumiveis;

ficheiro >> dconsumiveis;
string key = linha.substr(0, linha.find(':'));
string value = linha.substr(linha.find(':') + 1);
sscanf(value.c_str(), "%d", &dconsumiveis);
novo->gastoproj.dconsumiveis = dconsumiveis;
Link to comment
Share on other sites

Pois, deve ter havido alguma coisa que eu não entendi bem...

string linha; 
int dconsumiveis; // variável que irá guardar o valor dos consumíveis

ficheiro >> dconsumiveis; // a leitura que é feita nessa linha vai entrar na variavel dconsumiveis
string key = linha.substr(0, linha.find(':')); // cria uma string que guarda o que é anterior a ":"
string value = linha.substr(linha.find(':') + 1);// cria uma string que guarda o que é posterior a ":"
sscanf(value.c_str(), "%d", &dconsumiveis); // recebe a informação presente em value e guarda em dcomsumiveis
novo->gastoproj.dconsumiveis = dconsumiveis;

Ja percebi que o sscanf não trabalha da maneira que eu descrevi, mas também não estou bem a ver como ele vai trabalhar neste caso... 😕

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.