Ir ao conteúdo

Posts recomendados

Postado

Boa tarde,

 

Estou desenvolvendo um aplicativo simples para me ajudar em uma rotina. Tenho um arquivo de texto com números de pedido, quantidade e etc. E quero que meu programa leia ele e some para mim os produtos que forem iguais.

 

Exemplo do arquivo de texto:

 

Pedido,Serie,Filial,Terminal,Produto,Calculo,Quantidade,Quebra,Caixa,Tipo,Data,Hora,Nulo,Estorno,Devolução,Diferencial.

588602;01200633;001;09;0934;1995;0001,000;000,000;020;CX;191004;1029; ;E;D;000003
588602;01200634;001;09;0934;1995;0001,000;000,000;020;CX;191004;1029; ;E;D;000003
588602;01200635;001;09;0934;1995;0001,000;000,000;020;CX;191004;1029; ;E;D;000003
588602;01199859;001;09;0916;1995;0001,000;000,438;008;CX;191004;1029; ;E;D;000003
588602;01199863;001;09;0916;1995;0001,000;000,438;008;CX;191004;1029; ;E;D;000003
588602;01199860;001;09;0916;1995;0001,000;000,438;008;CX;191004;1029; ;E;D;000003
588602;01199861;001;09;0916;1995;0001,000;000,438;008;CX;191004;1029; ;E;D;000003
588602;01199862;001;09;0916;1995;0001,000;000,438;008;CX;191004;1029; ;E;D;000003

Programei da seguinte maneira:

 

Criei uma Classe Produtos com esses atributos:

 

namespace Interpretador
{
    class Produtos
    {
        public int pedido, serie, terminal, filial, produtos, calc, caixa, data, hora, diferencial;
        public double quantidade, quebra;
        public string estorno, devolucao, nulo, tipo;
    }
}

E no programa fiz assim: 

 

namespace Interpretador
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader LerLista = new StreamReader("C:\\RECJUN.txt");

            Produtos p = new Produtos();

            string ProdutosLidos = LerLista.ReadLine();

            while (true)
            {
                if (ProdutosLidos != null)
                {

                    string[] Lidos = ProdutosLidos.Split(';');
                    p.pedido = int.Parse(Lidos[0]);
                    p.serie = int.Parse(Lidos[1]);
                    p.filial = int.Parse(Lidos[2]);
                    p.terminal = int.Parse(Lidos[3]);
                    p.produtos = int.Parse(Lidos[4]);
                    p.calc = int.Parse(Lidos[5]);
                    p.quantidade = double.Parse(Lidos[6]);
                    p.quebra = double.Parse(Lidos[7]);
                    p.caixa = int.Parse(Lidos[8]);
                    p.tipo = (string) Lidos[9];
                    p.data = int.Parse(Lidos[10]);
                    p.hora = int.Parse(Lidos[11]);
                    p.nulo = Lidos[12];
                    p.estorno = Lidos[13];
                    p.devolucao = Lidos[14];
                    p.diferencial = int.Parse(Lidos[15]);

                    Console.WriteLine(p.produtos);
                    Console.WriteLine(p.quantidade);
                }
            }
        }
    }
}

Desse jeito o programa lê direitinho as informações, mas o que eu quero fazer é que quando um produto estiver repetido o programa some ele e me mostre a soma desse produto, mas realmente cheguei a um impasse, não sei como progredir. Se alguém puder ajudar ficarei muito grato.

Postado

Melhor que os produtos fiquem armazenados em um vetor:

std:vector <Produtos> produtos;
produtos.reserve(100);//opcional

Acrescente essa linha:

p.diferencial = int.Parse(Lidos[15]);
produtos.push_back(p);//acrescentar essa linha
                    

você então ordena os produtos pelo código do produto

class Produtos
    {
        public int pedido, serie, terminal, filial, produtos, calc, caixa, data, hora, diferencial;
        public double quantidade, quebra;
        public string estorno, devolucao, nulo, tipo
		bool operator() (Produtos p1, produtos p2) { return (p1.produtos<p2.produtos);}//acrescentar para ordenar os produtos pele cogido do produtos
    }

std::sort(produtos.begin(), produtos.end()); //depois do while

Então, varra o vector e vá somando os valores. Cada vez que o código do produto mudar você zera o contador

int codigo = -1;
int soma;
for (std::vector<Produtos>::iterator it=produtos.begin(); it!=produtos.end(); ++it)
{  
  if (codigo != it.produtos) //o codigo do produto mudou
  {
  	cout << "Produto" << codigo << ":" << soma;
    soma = 0;
    codigo = it.produtos;
  }
  soma += it.quantidade;
}

Isto é só uma ideia, não testei e pode ter alguns erros, mas o principio é esse. Veja se consegue implementar.

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!