Ir ao conteúdo

C++ Como posso colocar as variaveis que recebo em um scopo Global


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

main.cc

// menu principal o qual aprensenta a funcionalidade de investimentos.cpp
#include "ImportarDados.h"

int main() {
	string Name_cliente;
	cout << "Digite o Arquivo do nome do Cliente (exemplo ClienteAlfa.txt) : ";
	cin.get();
	getline(cin, Name_cliente);

	ofstream fout;
	fout.open(Name_cliente.c_str(), ios::binary);
	if (fout.is_open()) {
		ifstream file(Name_cliente);
		string str;
		while (getline(file, str)) {

			vector<string> dadosSeparados = split(str, ';');

			string tipo = dadosSeparados.at(0);
			string estrategia = dadosSeparados.at(1);
			string nome = dadosSeparados.at(2);
			string rating = dadosSeparados.at(3);
			string fgc = dadosSeparados.at(4);
			string valorInvestido = dadosSeparados.at(5);
			string taxa = dadosSeparados.at(6);
			string dataInvestimento = dadosSeparados.at(7);
			string dataResgate = dadosSeparados.at(8);

			cout << tipo << " - " << rating << " - " << dataResgate << "\n";
		}
	}

	

	return 0;
}

 

 

ImportarDados.h

//importa dados do usuario para que o programa pegue e faça os devidos calculos
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;

vector<string> split(string str, char delimitador) {
	vector<string> internal;
	stringstream ss(str);
	string tok;

	while (getline(ss, tok, delimitador)) {
		internal.push_back(tok);
	}

	return internal;
}

tenho esse codigo em produção mas não sei como colocar as variaveis que preciso acessar em outro local, por elas estarem em escopo local, não estou sabendo colocar em um escopo global

 

  • Solução
Postado
2 horas atrás, HUGO_dev_ze disse:

tenho esse codigo em produção mas não sei como colocar as variaveis que preciso acessar em outro local, por elas estarem em escopo local, não estou sabendo colocar em um escopo global

 

Não sei se entendi, mas está tentando ler um arquivo csv?

 

Porque não posta um exemplo da entrada, com umas poucas linhas? Ficaria mais fácil de alguém ajudar.

 

Se ainda não aprendeu a colocar coisas em um escopo global, nem tente: é péssima ideia. Proibido em guias de boas práticas, empresas, escolas...

 

O que se procura na verdade é o contrário, diminuir o escopo das coisas. Por essa razão por exemplo desde os anos 80 se pode declarar variáveis em um for em C. C++ sempre teve isso.

 

E em C++14 eu acho passou a ser possível declarar variáveis dentro de um switch ou while. E lembro que qualquer bloco de chaves  serve exatamente para delimitar um novo escopo em C++, mesmo que seja no meio de uma função...

 

O escopo global inclui tudo que está solto pelo código, como aquelas coisas declaradas fora de main(). Mas escrevo de novo: nunca faça isso. Pode custar sua nota ou seu emprego. E no mínimo via custar seu tempo: é um pesadelo de manutenção. Nem todos seus programas vão ter 30 linhas e 1 função.

 

O que você quer fazer é passar argumentos. Só isso.

 

Sua função split() aparentemente deveria retornar um vetor de strings definido a partir do arquivo de entrada. Então o simples é passar para ela o nome do arquivo e receber o vetor.

 

De volta ao seu programa

 

Seu programa parece ter sido inspirado em C e não em C++, e está muito complicado sem necessidade. Há maneiras bem mais simples de escrever isso em C++.

 

Pode postar algum detalhe da entrada?

 

 

 

Postado

@arfneto o exemplo de entrada seria o arquivo .txt? 

 

//arquivo.txt 

RV; Multimercado;Western Asset FIM;A;não;4000;58%;15/01/2021;15/12/2021

 

estou usando C++ com classe . preciso desses dados para fazer outras coisas dentro do programa

 

e programa de investimentos que preciso desenvolver.

Postado

Sim,  claro.

 

Seu programa está ainda no "modo C", bem longe de um programa C++. E qual o lance das classes?

 

Em C++ 'e muito mais fácil escrever essas coisas do que em C. No entanto processar arquivos csv usando getline() não é adequado. 

csv é claramente formatado e é muito mais fácil usar fscanf() que foi escrita para isso.

 

Sugiro começar com uma planilha...

 

Eu postei vários programas completos  nesse forum sobre tratar esses arquivos em C e C++, deve dar pra pesquisar aqui no conteúdo.

Postado

@arfneto fiz algo melhor para tentar recomeçar

 

///main.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
#include "ImportarDados.h"
using namespace std;

std::vector<std::string> split(const std::string& s, char c);

int main()
{
    string filename;
    ifstream fileC;

    cout << "Qual o nome do Cliente (EXEM:nome.txt)?";
    cin >> filename;

    std::string file_path(filename);
    std::ifstream in_s(file_path);

    std::vector <std::vector<std::string>> content;

    if (in_s)
    {
        std::string line;
        std::vector <std::string> vec;
        while (getline(in_s, line))
        {
            for (const std::string& str : split(line, ';'))
                vec.push_back(str);
            content.push_back(vec);
            vec.clear();
        }
        vector<string> dadosSeparados = split(line, ';');

        string tipo = dadosSeparados.at(0);
        string estrategia = dadosSeparados.at(1);
        string nome = dadosSeparados.at(2);
        string rating = dadosSeparados.at(3);
        string fgc = dadosSeparados.at(4);
        string valorInvestido = dadosSeparados.at(5);
        string taxa = dadosSeparados.at(6);
        string dataInvestimento = dadosSeparados.at(7);
        string dataResgate = dadosSeparados.at(8);

        cout << tipo << " - " << rating << " - " << dataResgate << "\n";
        in_s.close();
    }
    else
        std::cout << "Não foi possível abrir : " + file_path << std::endl;
        
    

    return 0;
}


    
  

  
///ImportarDados.cpp
  
//importa dados do usuario para que o programa pegue e faça os devidos calculos
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

std::vector<std::string> split(const std::string& s, char c)
{
    std::vector<std::string> splitted;

    std::string word;
    for (char ch : s)
    {
        if ((ch == c) && (!word.empty()))
        {
            splitted.push_back(word);
            word.clear();
        }
        else
            word += ch;
    }
    if (!word.empty())
        splitted.push_back(word);




    return splitted;
}
  
///ImportarDados.h
  
#include <iostream>
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;

std::vector<std::string> split(const std::string& s, char c);

 

 

Gostaria de saber como faço desse vetor que recebe a entrada do arquivo 

"RV;Multimercado;Western Asset FIM;A;não;4000;58%;15/01/2021;15/12/2021"

pegar as Variaveis como por exemplo 58% e fazer dela uma variavel de uma equação e outro arquivo.cpp. 

 

Postado
9 horas atrás, HUGO_dev_ze disse:

Variaveis como por exemplo 58% e fazer dela uma variavel de uma equação e outro arquivo.cpp

 

Que significa?

 

9 horas atrás, HUGO_dev_ze disse:

fiz algo melhor para tentar recomeçar

 

Parece melhor!

 

Mas ainda não é um programa C++. E não tem uma única classe. E não foi escrito em torno dos dados. 

 

14 horas atrás, arfneto disse:

Sugiro começar com uma planilha...

 

EXEMPLO

 

image.png.c036f06a04635489ae849be7acf986c9.png

 

 

Esses são seus dados. Essa é a ideia de um arquivo CSV. Seu programa deve ser escrito em torno disso

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!