Ir para o conteúdo
Moohsilva

Ler ficheiro e passar valores para as variáveis c++

Mensagens Recomendadas

Moohsilva

Boa noite,

preciso de uma ajudinha no código que tenho estado a fazer para um trabalho em que está armazenado num ficheiro txt registos referentes a produtos farmacêuticos desta maneira:

Código: 0

Nome: ben-u-rum

Quantidade: 20

Preço de Compra: 12.5

Preço de Venda: 15.5

Validade: 10/04/2016

----------------------------------

Código: 1

Nome: Brufen

Quantidade: 20

Preço de Compra: 9.9

Preço de Venda: 10.9

Validade: 12/09/2016

----------------------------------

e o que pretendo é passar os valores que estão a direita dos ':' para as variáveis que tenho na struct... Tenho feito experiências com (if, swich e for) mas não tou a conseguir chegar lá :(, se alguém me pudesse dár uma ajuda sff!

int c=0;
string aux;
line="";

doc_in.open("Base_Dados/Produtos.txt", ios::in);

if(doc_in.is_open())
{
while(getline(doc_in, line, ':'))
{
for(c=0; c<=1; c++)
{
if(line == "Código")
{
aux = line;
cout << "\nValor é: " << aux;
}
else
// cout << "\nn/a";

if(c==0)
{
if(line == "Código")
{
//aux = line;
cout << "\nValor de 0:" << line;
aux=1;
}
}
else if(c==1)
{
if(aux==1)
{
cout << "\nValor de 1:" << line;
}
}
}
}


"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

bem, se o problema é ler o ficheiro, aqui tens.

o resto, deverás saber o que fazer

#include <fstream>
#include <iostream>

#define FILEPATH "Base_Dados/Produtos.txt"
#define BUFFER_SIZE 256

int main(int argc, char** argv)
{
   std::ifstream file{FILEPATH, std::ios::in};
   if (file.is_open())
   {
       char buffer[bUFFER_SIZE];
       while (file.getline(buffer, BUFFER_SIZE))
       {
           std::string line{buffer};

           auto sep_pos = line.find_first_of(':');
           if (sep_pos != std::string::npos)
           {
               std::string key{line.substr(0, sep_pos)};
               std::string value{line.substr(sep_pos + 1)};

               std::cout << "key [" << key << "] | value : [" << value << "]" << std::endl;
           }
           else
           {
               switch (line[0])
               {
                   case '-' : 
                       std::cout << "end of record found" << std::endl;
                       break;
                   case '\0' : 
                       std::cout << "empty line" << std::endl;
                       break;
                   default:
                       std::cout << "unable to get key/value from line : " << line << std::endl;
                       break;
               }
           }
       }
   }
   else
   {
       std::cout << "invalid file : " << FILEPATH << std::endl;
   }


   return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Moohsilva

Obrigado pela ajuda!

Editado por Moohsilva

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Moohsilva

Podes só me explicar melhor esta parte do código acho que não percebi bem o funcionamento e tá a dar uns erros a compilar, o que é essa variável 'sep_pos' e porque é que está assim declarado string line{buffer}, etc..

char buffer[bUFFER_SIZE];
while (file.getline(buffer, BUFFER_SIZE))
{
std::string line{buffer};

auto sep_pos = line.find_first_of(':');
if (sep_pos != std::string::npos)
{
std::string key{line.substr(0, sep_pos)};
std::string value{line.substr(sep_pos + 1)};

std::cout << "key [" << key << "] | value : [" << value << "]" << std::endl;
}


"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Moohsilva

Ahh ok éra isso, já está a funcionar :thumbsup: Obg.


"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.